Home >php教程 >php手册 >PHP中使用SimpleXML检查XML文件结构实例,simplexmlxml

PHP中使用SimpleXML检查XML文件结构实例,simplexmlxml

WBOY
WBOYOriginal
2016-06-13 09:17:18867browse

PHP中使用SimpleXML检查XML文件结构实例,simplexmlxml

利用 SimpleXML 去检查 XML 结构是否符合规格,为了让这个程序可以多用途,采用了一个基准文件的作为结构准则,依据里面定义的节点跟属性,去检查文件是否符合基本要求的格式。

复制代码 代码如下:


   
/**检查 XML 文件结构  
* @param string $baseFilePath 基准结构文件  
* @param string $checkFilePath 待检查文件  
* @return bool 当结构与基准文件相符合时则传递 true,否则是 false  
* */   
function checkXmlFileStructure($baseFilePath,$checkFilePath){   
   /*开启 Base File*/   
   if(!file_exists($baseFilePath)){ return false; }   
   $base = simplexml_load_file($baseFilePath);   
   if($base===false){ return false; }   
   
   /*开启 Check File*/   
   if(!file_exists($checkFilePath)){ return false; }   
   $check = simplexml_load_file($checkFilePath);   
   if($check===false){ return false; }   
   
   /*比较起始点的名称*/   
   if($base->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
   
   
      
      
      

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn