PHP中使用SimpleXML检查XML文件结构实例
发布时间:2020-12-13 02:19:52 所属栏目:PHP教程 来源:网络整理
导读:《PHP中使用SimpleXML检查XML文件结构实例》要点: 本文介绍了PHP中使用SimpleXML检查XML文件结构实例,希望对您有用。如果有疑问,可以联系我们。 利用 SimpleXML 去检查 XML 结构是否符合规格,为了让这个程序可以多用途,采用了一个基准文件的作为结构准则,
《PHP中使用SimpleXML检查XML文件结构实例》要点: 利用 SimpleXML 去检查 XML 结构是否符合规格,为了让这个程序可以多用途,采用了一个基准文件的作为结构准则,依据里面定义的节点跟属性,去检查文件是否符合基本要求的格式.PHP教程
代码如下:
<?php??? ??? /**检查 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.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<br />"; 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
代码如下:
<?xml version="1.0" encoding="UTF-8"?>??? <items>??? ?? <item>??? ?????? <Category>Category笔墨</Category>??? ?????? <Title>Title笔墨</Title>??? ?? </item>??? </items>? check_1.xml ? <?xml version="1.0" encoding="UTF-8"?>??? <items>??? ?? <item>??? ?????? <Category>Category笔墨</Category>??? ?????? <Title>Title笔墨</Title>??? ?? </item>??? ?? <item>??? ?????? <Category>Category笔墨</Category>??? ?????? <Title>Title笔墨</Title>??? ?????? <Description>Description笔墨</Description>??? ?? </item>??? </items>?? 测试范例 2 base_2.xml
代码如下:
<?xml version="1.0" encoding="UTF-8"?>??? <items>??? ?? <item category="Category笔墨" Title="Title笔墨"/>??? </items>?? check_2.xml <?xml version="1.0" encoding="UTF-8"?>??? <items>??? ?? <item category="Category笔墨" Title="Title笔墨" Description="Description笔墨" />??? ?? <item category="Category笔墨" Title="Title笔墨" />??? ?? <item category="Category笔墨" Title="Title笔墨" Description="Description笔墨" />??? </items> 《PHP中使用SimpleXML检查XML文件结构实例》是否对您有启发,欢迎查看更多与《PHP中使用SimpleXML检查XML文件结构实例》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |