PHP中使用SimpleXML检查XML文件结构实例
2015-01-24信息快讯网
这篇文章主要介绍了PHP中使用SimpleXML检查XML文件结构实例,本文讲解使用SimpleXML来检查一个XML文件是否符合规范的方法,需要的朋友可以参考下
利用 SimpleXML 去检查 XML 结构是否符合规格,为了让这个程序可以多用途,采用了一个基准文件的作为结构准则,依据里面定义的节点跟属性,去检查文件是否符合基本要求的格式。
<?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.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>
php导入excel文件到mysql数据库的方法
CI框架中site_url()和base_url()的区别
WampServer下安装多个版本的PHP、mysql、apache图文教程
PHP中使用CURL获取页面title例子
PHP中使用php5-ffmpeg撷取视频图片实例
PHP和Shell实现检查SAMBA与NFS Server是否存在
PHP实现的简易版图片相似度比较
php中$_POST与php://input的区别实例分析
php使用google地图应用实例
php读取mssql的ntext字段返回值为空的解决方法
php连接oracle数据库及查询数据的方法
php生成excel列名超过26列大于Z时的解决方法
PHP中使用xmlreader读取xml数据示例
VPS中使用LNMP安装WordPress教程
Yii中使用PHPExcel导出Excel的方法
php中实现xml与mysql数据相互转换的方法
腾讯微博提示missing parameter errorcode 102 错误的解决方法
CentOS6.5 编译安装lnmp环境
php中http与https跨域共享session的解决方法
php将textarea数据提交到mysql出现很多空格的解决方法
thinkphp中session和cookie无效的解决方法
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
php提示Failed to write session data错误的解决方法
php运行提示:Fatal error Allowed memory size内存不足的解决方法
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
PHP使用xmllint命令处理xml与html的方法
php中Array2xml类实现数组转化成XML实例
PHP中SimpleXML函数用法分析
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
PHP语法自动检查的Vim插件