熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

怎麼用php解析xml文件

2013-11-15 12:24:28  來源: PHP編程 

  DOMElement

  DOMElement DOMDocument::createElement ( string $name [ string $value ] )

  創建節點元素

  String $name節點名

  String $value節點的值

   添加節點

  •DOMNode DOMNode::appendChild ( DOMNode $newnode )

  添加子節點

  DOMNode $newnode新節點

  在dom操作中增刪改操作必須依賴於父節點

   保存

  •string DOMDocument::saveXML

  保存至某個字符串中

  •int DOMDocument::save ( string $filename )

  保存至某個文件中

  String $filename文件名

   刪除節點

  •DOMNode DOMNode::removeChild ( DOMNode $oldnode )

  刪除節點

  DOMNode $oldnode要刪除的節點

   更新節點

  •DOMNode DOMNode::replaceChild ( DOMNode $newnode DOMNode $oldnode )

  DOMNode $newnode新節點

  DOMNode $oldnode原節點

   添加屬性

  •DOMAttr DOMElement::setAttribute( string $name string $value )

  string $name 屬性名

  string $value 屬性值

   修改屬性

  DOMAttr DOMElement::setAttribute( string $name string $value )

  string $name 屬性名

  string $value 屬性值

   刪除屬性

  •bool DOMElement::removeAttribute ( string $name )

  string $name要刪除的屬性名稱

   獲取屬性

  •string DOMElement::getAttribute ( string $name )

  string $name要獲取的屬性值的屬性名

  DOMDocument還是PHP後推出的DOM擴展的一部分可用來建立或解析html/xml目前只支持utf編碼

代碼如下  

  $xmlstring = <<<XML
<?xml version=?>
<document>
<cmd attr=default>login</cmd>
<login>imdonkey</login>
</document>
XML;

  $dom = new DOMDocument();
$dom>loadXML($xmlstring);
print_r(getArray($dom>documentElement));

  function getArray($node) {
$array = false;

  if ($node>hasAttributes()) {
foreach ($node>attributes as $attr) {
$array[$attr>nodeName] = $attr>nodeValue;
}
}

  if ($node>hasChildNodes()) {
if ($node>childNodes>length == ) {
$array[$node>firstChild>nodeName] = getArray($node>firstChild);
} else {
foreach ($node>childNodes as $childNode) {
if ($childNode>nodeType != XML_TEXT_NODE) {
$array[$childNode>nodeName][] = getArray($childNode);
}
}
}
} else {
return $node>nodeValue;
}
return $array;
}

  SimpleXML

  SimpleXML是PHP後提供的一套簡單易用的xml工具集可以把xml轉換成方便處理的對象也可以組織生成xml數據不過它不適用於包含namespace的xml而且要保證xml格式完整(wellformed)它提供了三個方法simplexml_import_domsimplexml_load_filesimplexml_load_string函數名很直觀地說明了函數的作用三個函數都返回SimpleXMLElement對象數據的讀取/添加都是通過SimpleXMLElement操作

代碼如下  

  
$string = <<<XML
<?xml version=?>
<document>
<cmd>login</cmd>
<login>imdonkey</login>
</document>
XML;

  $xml = simplexml_load_string($string);
print_r($xml);
$login = $xml>login;//這裡返回的依然是個SimpleXMLElement對象
print_r($login);
$login = (string) $xml>login;//在做數據比較時注意要先強制轉換
print_r($login);

  SimpleXML的優點是開發簡單缺點是它會將整個xml載入內存後再進行處理所以在解析超多內容的xml文檔時可能會力不從心如果是讀取小文件而且xml中也不包含namespace那SimpleXML是很好的選擇

  XMLReader

  XMLReader也是PHP之後的擴展(後默認安裝)它就像游標一樣在文檔流中移動並在每個節點處停下來操作起來很靈活它提供了對輸入的快速和非緩存的流式訪問可以讀取流或文檔使用戶從中提取數據並跳過對應用程序沒有意義的記錄

  以一個利用google天氣api獲取信息的例子展示下XMLReader的使用這裡也只涉及到一小部分函數更多還請參考官方文檔

代碼如下  

  $xml_uri = ;
$current = array();
$forecast = array();

  $reader = new XMLReader();
$reader>open($xml_uri gbk);
while ($reader>read()) {
//get current data
if ($reader>name == "current_conditions" && $reader>nodeType == XMLReader::ELEMENT) {
while($reader>read() && $reader>name != "current_conditions") {
$name = $reader>name;
$value = $reader>getAttribute(data);
$current[$name] = $value;
}
}

  //get forecast data
if ($reader>name == "forecast_conditions" && $reader>nodeType == XMLReader::ELEMENT) {
$sub_forecast = array();
while($reader>read() && $reader>name != "forecast_conditions") {
$name = $reader>name;
$value = $reader>getAttribute(data);
$sub_forecast[$name] = $value;
}
$forecast[] = $sub_forecast;
}
}
$reader>close();

  XMLReader和XML Parser類似都是邊讀邊操作較大的差異在於SAX模型是一個“推送”模型其中分析器將事件推到應用程序在每次讀取新節點時通知應用程序而使用XmlReader的應用程序可以隨意從讀取器提取節點可控性更好

  由於XMLReader基於libxml所以有些函數要參考文檔看看是否適用於你的libxml版本


From:http://tw.wingwit.com/Article/program/PHP/201311/20888.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.