时间:2021-05-26
利用 SimpleXML 去检查 XML 结构是否符合规格,为了让这个程序可以多用途,采用了一个基准文件的作为结构准则,依据里面定义的节点跟属性,去检查文件是否符合基本要求的格式。
复制代码 代码如下:
<?php
/**检查 XML 文件结构
* @param string $baseFilePath 基准结构文件
* @param string $checkFilePath 待检查文件
* @return bool 当结构与基准文件相符合时则传递 true,否则是 false
* */
function checkXmlFileStructure($baseFilePath,$checkFilePath){
if(!file_exists($baseFilePath)){ return false; }
$base = simplexml_load_file($baseFilePath);
if($base===false){ return false; }
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<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>
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在php5中读写xml文档是非常方便的,可以直接使用php的SimpleXML方法来快速解析与生成xml格式的文件,下面举例说明:创建一个SimpleXML对象
本文实例讲述了PHP基于SimpleXML生成和解析xml的方法。分享给大家供大家参考,具体如下:xml就不多解释了,php也提供了操作xml的方法,php操作
本文实例讲述了Codeigniter通过SimpleXML将xml转换成对象的方法。分享给大家供大家参考。具体分析如下:SimpleXML是一个php扩展,有了
PHP中3种生成XML文件方法的速度比较有3种方法,分别是直接写;使用DomDocument;使用SimpleXML;其实还有第4种:使用XMLWriter,不
本文实例讲述了关于php中SimpleXML函数的用法,此函数是允许您把XML转换为对象,分享给大家供大家参考。具体分析如下:SimpleXML函数允许您把XM