当前位置:  首页  >  PHP教程  >  PHP 基础  >  基础教程

PHP使用SimpleXML检查XML文件结构是否合法实例-PHP源码

SimpleXML函数允许您把XML转换为对象。通过普通的属性选择器或数组迭代器,可以处理这个对象,就像处理任何其他对象一样。SimpleXML函数是PHP核心的组成部分。无需安装即可使用这些函数。
SimpleXML 函数允许您把 XML 转换为对象。通过普通的属性选择器或数组迭代器,可以处理这个对象,就像处理任何其他对象一样。SimpleXML 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。

《script》ec(2);《script》

利用 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.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
"; 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

代码如下





吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有