找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1192|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2536

主题

2536

帖子

7532

积分

论坛元老

Rank: 8Rank: 8

积分
7532
跳转到指定楼层
楼主
发表于 2018-2-14 05:50:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            利用 SimpleXML 去检查 XML 结构是否符合规格,为了让这个程序可以多用途,采用了一个基准文件的作为结构准则,依据里面定义的节点跟属性,去检查文件是否符合基本要求的格式。
[U]复制代码[/U] 代码如下:
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
"; exit;   
   }   
   
   echo( checkXmlFileStructure($_GET['base_file'],$_GET['check_file']) ? '1' : '0');   
}   
使用方式(shell)
[U]复制代码[/U] 代码如下:
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
[U]复制代码[/U] 代码如下:
   
   
      
       Category文字   
       Title文字   
   
   
  
check_1.xml

   
   
      
       Category文字   
       Title文字   
   
   
      
       Category文字   
       Title文字   
       Description文字   
   
   
   
测试范例 2
base_2.xml
[U]复制代码[/U] 代码如下:
   
   
      
   
check_2.xml
   
   
      
      
      

            
            
您可能感兴趣的文章:
  • PHP XML操作的各种方法解析(比较详细)
  • PHP中simplexml_load_string函数使用说明
  • php simplexmlElement操作xml的命名空间实现代码
  • PHP中的生成XML文件的4种方法分享
  • php的SimpleXML方法读写XML接口文件实例解析
  • php中simplexml_load_file函数用法实例
  • php+xml编程之SimpleXML的应用实例
  • php使用simplexml_load_file加载XML文件并显示XML的方法
  • PHP使用DOM和simplexml读取xml文档的方法示例
  • PHP基于SimpleXML生成和解析xml的方法示例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端