手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP中使用SimpleXML检查XML文件结构实例
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.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<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$" ]; then

echo "Run Error"

fi

测试范例 1

base_1.xml

复制代码 代码如下:

<"1.0" encoding="UTF-8"?>

<items>

<item>

<Category>Category文字</Category>

<Title>Title文字</Title>

</item>

</items>

check_1.xml

<"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

复制代码 代码如下:

<"1.0" encoding="UTF-8"?>

<items>

<item category="Category文字" Title="Title文字"/>

</items>

check_2.xml

<"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中使用SimpleXML检查XML文件结构实例】相关文章:

用PHP生成自己的LOG文件

在PHP中使用XML

使用PHP维护文件系统

PHP嵌套输出缓冲代码实例

PHP SplObjectStorage使用实例

一个php作的文本留言本的例子(二)

PHP curl使用实例

如何在PHP中使用Oracle数据库(6)

PHP中的traits简单使用实例

PHP开发文件系统实例讲解

精品推荐
分类导航