您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP使用SimpleXML检查XML文件结构是否合法实例

2025/6/7 19:36:58发布8次查看
simplexml 函数允许您把 xml 转换为对象。通过普通的属性选择器或数组迭代器,可以处理这个对象,就像处理任何其他对象一样。simplexml 函数是 php 核心的组成部分。无需安装即可使用这些函数。
利用 simplexml 去检查 xml 结构是否符合规格,为了让这个程序可以多用途,采用了一个基准文件的作为结构准则,依据里面定义的节点跟属性,去检查文件是否符合基本要求的格式。
 代码如下 复制代码
getname() != $check->getname()){ return false; }
/*比较结构*/   
   return checkxmlstructure($base,$check);   
}
/**检查 xml 结构  
* @param simplexmlelement $base 基准结构对象  
* @param simplexmlelement $check 待检查 xml 对象  
* @return bool 当结构与基准对象相符合时则传递 true,否则是 false  
* */   
function checkxmlstructure($base,$check){   
   /*检查属性*/   
   foreach ($base->attributes() as $name => $baseattr){   
       /*必要的属性不存在*/   
       if(!isset($check->attributes()->$name)){ return false; }   
   }
/*当没有子节点时,则检查对象也不能有子节点*/   
   if(count($base->children())==0){   
       return (count($check->children())==0);   
   }
/*将检查对象的子节点分群*/   
   $checkchilds = array();   
   foreach($check->children() as $name => $child){   
       $checkchilds[$name][] = $child;   
   }
/*检查子节点*/   
   $checked = array();   
   foreach($base->children() as $name => $basechild){   
       /*跳过已经检查的子节点*/   
       if(in_array($name, $checked)){ continue; }   
       $checked[] = $name;
/*检查必要的子节点是否存在*/   
       if(emptyempty($checkchilds[$name])){ return false; }
foreach ($checkchilds[$name] as $child){   
           /*递回检查子节点*/   
           if( !checkxmlstructure($basechild, $child) ){ return false; }   
       }   
   }
return true;   
}
/*==============================================================================*/
if(isset($_server['argv'])){   
   parse_str(preg_replace('/&[-]+/','&',join('&',$_server['argv'])), $_get);
if(emptyempty($_get['base_file']) || emptyempty($_get['check_file'])){   
       echo run: .basename(__file__). base_file=base.xml check_file=check.xmln; exit(1);   
   }
exit( checkxmlfilestructure($_get['base_file'],$_get['check_file']) ? 0 : 1);
}else{   
   if(emptyempty($_get['base_file']) || emptyempty($_get['check_file'])){   
       echo run: .basename(__file__).?base_file=base.xml&check_file=check.xml
; exit;   
   }
echo( checkxmlfilestructure($_get['base_file'],$_get['check_file']) ? '1' : '0');   
}
使用方式(shell)
 代码如下 复制代码
php check_xml_file_structure.php base_file=base.xml check_file=check.xml
if [ j$? != j0 ]; then   
   echo run error   
fi
测试范例 1
base_1.xml
 代码如下 复制代码
category文字
       title文字
check_1.xml
 代码如下 复制代码
category文字   
       title文字
category文字   
       title文字   
       description文字
测试范例 2
base_2.xml
 代码如下 复制代码
check_2.xml
 代码如下 复制代码
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product