欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP中使用SimpleXML檢查XML文件結構實例

 更新時間:2015年01月07日 09:40:49   投稿:junjie  
這篇文章主要介紹了PHP中使用SimpleXML檢查XML文件結構實例,本文講解使用SimpleXML來檢查一個XML文件是否符合規(guī)范的方法,需要的朋友可以參考下

利用 SimpleXML 去檢查 XML 結構是否符合規(guī)格,為了讓這個程序可以多用途,采用了一個基準文件的作為結構準則,依據(jù)里面定義的節(jié)點跟屬性,去檢查文件是否符合基本要求的格式。

復制代碼 代碼如下:

<?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; }   
   }   
   
   /*當沒有子節(jié)點時,則檢查對象也不能有子節(jié)點*/   
   if(count($base->children())==0){   
       return (count($check->children())==0);   
   }   
   
   /*將檢查對象的子節(jié)點分群*/   
   $checkChilds = array();   
   foreach($check->children() as $name => $child){   
       $checkChilds[$name][] = $child;   
   }   
   
   /*檢查子節(jié)點*/   
   $checked = array();   
   foreach($base->children() as $name => $baseChild){   
       /*跳過已經(jīng)檢查的子節(jié)點*/   
       if(in_array($name, $checked)){ continue; }   
       $checked[] = $name;   
   
       /*檢查必要的子節(jié)點是否存在*/   
       if(emptyempty($checkChilds[$name])){ return false; }   
   
       foreach ($checkChilds[$name] as $child){   
           /*遞回檢查子節(jié)點*/   
           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 array_map與array_walk比較案例詳解

    php array_map與array_walk比較案例詳解

    這篇文章主要介紹了php array_map與array_walk比較案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • PHP獲取windows登錄用戶名的方法

    PHP獲取windows登錄用戶名的方法

    這篇文章主要介紹了PHP獲取windows登錄用戶名的方法,通過NTLM來實現(xiàn),NTLM 是 Windows NT 早期版本的標準安全協(xié)議,需要的朋友可以參考下
    2014-06-06
  • 使用Limit參數(shù)優(yōu)化MySQL查詢的方法

    使用Limit參數(shù)優(yōu)化MySQL查詢的方法

    我們在做一些查詢的時候總希望能避免數(shù)據(jù)庫引擎做全表掃描,因為全表掃描時間長,而且其中大部分掃描對客戶端而言是沒有意義的。那么在 MySQL 中有那些方式是可以避免全表掃面的呢?除了我們大家很熟悉的通過使用索引列或分區(qū)等方式來進行查詢的優(yōu)化之外還有那些呢?
    2008-11-11
  • 使用php判斷服務器是否支持Gzip壓縮功能

    使用php判斷服務器是否支持Gzip壓縮功能

    開啟Gzip是需要服務器支持的,在這里我們簡單的使用php來判斷服務器是否支持Gzip功能,具體如下,感興趣的朋友可以參考下
    2013-09-09
  • php生成百度sitemap站點地圖類函數(shù)實例

    php生成百度sitemap站點地圖類函數(shù)實例

    這篇文章主要介紹了php生成百度sitemap站點地圖類函數(shù)的方法,詳細講述了百度站點sitemap的實現(xiàn)方法與注意事項,在web站點的建設中非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • 淺談php調(diào)用python文件

    淺談php調(diào)用python文件

    這篇文章主要介紹了php調(diào)用python文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • php實現(xiàn)查看郵件是否已被閱讀的方法

    php實現(xiàn)查看郵件是否已被閱讀的方法

    當你在發(fā)送郵件時,你或許很想知道該郵件是否被對方已閱讀,下面有段不錯的代碼可以實現(xiàn)此需求,喜歡的朋友可以參考下
    2013-12-12
  • 解析ajax事件的調(diào)用順序

    解析ajax事件的調(diào)用順序

    本篇文章是對ajax事件的調(diào)用順序進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP正則刪除HTML代碼中寬高樣式的方法

    PHP正則刪除HTML代碼中寬高樣式的方法

    這篇文章主要介紹了PHP正則刪除HTML代碼中寬高樣式的方法,涉及php針對HTML代碼的正則匹配、替換等操作技巧,需要的朋友可以參考下
    2017-06-06
  • 基于PHP實現(xiàn)堆排序原理及實例詳解

    基于PHP實現(xiàn)堆排序原理及實例詳解

    這篇文章主要介紹了基于PHP實現(xiàn)堆排序原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06

最新評論