PHP中使用SimpleXML检查XML文件结构实例 利用 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.xml\n"; 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