PHP中使用SimpleXML检查XML文件结构实例
发布:smiling 来源: PHP粉丝网 添加日期:2021-05-05 21:16:37 浏览: 评论:0
这篇文章主要介绍了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>
Tags: SimpleXML XML文件结构
相关文章
- ·php SimpleXML读写XML接口文件例子分析(2014-08-20)
- ·PHP 使用 SimpleXML Key 遇到$如何取值(2014-08-20)
- ·php中SimpleXMLElement 对象转换为数组(2014-08-20)
- ·PHP使用SimpleXML检查XML文件结构是否合法实例(2015-04-09)
- ·php中simplexml_load_string使用实例分享(2020-09-14)
- ·php+xml编程之SimpleXML的应用实例(2021-05-08)
- ·php使用simplexml_load_file加载XML文件并显示XML的方法(2021-05-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)