加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 02:19:52 所属栏目:PHP教程 来源:网络整理
导读:《PHP中使用SimpleXML检查XML文件结构实例》要点: 本文介绍了PHP中使用SimpleXML检查XML文件结构实例,希望对您有用。如果有疑问,可以联系我们。 利用 SimpleXML 去检查 XML 结构是否符合规格,为了让这个程序可以多用途,采用了一个基准文件的作为结构准则,

《PHP中使用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教程

代码如下:

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为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读