PHP用DOMDocument解析xml檔案____PHP

來源:互聯網
上載者:User
例子1: 迴圈所有 "artist" 元素 (nodetypes = 1),尋找與 JavaScript 所傳資料向匹配的名字 找到 CD 包含的正確 artist 輸出 album 的資訊
xml檔案:
<CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> </CD>
·········
</CATALOG>
xml檔案分析:
php檔案: 步驟: 迴圈所有 "artist" 元素 (nodetypes = 1),尋找與 JavaScript 所傳資料向匹配的名字 找到 CD 包含的正確 artist 輸出 album 的資訊
<?php$q=$_GET["q"];$xmlDoc = new DOMDocument();$xmlDoc->load("cd_catalog.xml");$x=$xmlDoc->getElementsByTagName('ARTIST');   //通過ARTIST標籤找到ARTIST結點for ($i=0; $i<=$x->length-1; $i++){//Process only element nodesif ($x->item($i)->nodeType==1)   //【注釋1】   {  if ($x->item($i)->childNodes->item(0)->nodeValue == $q) //【注釋2】    {     $y=($x->item($i)->parentNode);    }  }}$cd=($y->childNodes);for ($i=0;$i<$cd->length;$i++){ //Process only element nodesif ($cd->item($i)->nodeType==1)  {   echo($cd->item($i)->nodeName);  echo(": ");  echo($cd->item($i)->childNodes->item(0)->nodeValue);  echo("<br />");  } }?>
【注釋1】  如果節點是元素節點,則nodeType屬性返回的是1;如果是屬性節點,則nodeType屬性返回的是2。通過這方法排除掉非元素節點。 $x擷取到的是ARTIST節點 數組,因為真箇xml檔案有多個ARTIST節點,所以要用item(index)來確定當前是哪個ARTIST節點(按出現順序排列)。 $x->item(0)表示第一個出現的ARTIST標籤。 【注釋2】   第$i+1個ARTIST節點的子節點是文本,所以nodeValue就是對應的常值內容。


例子2: Me.xml 
<?xml version="1.0" encoding="utf-8"?> 
<phplamp> 
<post> 
<title id="1">PHP XML處理介紹一</title> 
<details>詳細內容一</details> 
</post> 
<post> 
<title id="2">PHP XML處理介紹二</title> 
<details>詳細內容二</details> 
</post> 
<post> 
<title id="3">PHP XML處理介紹三</title> 
<details>詳細內容三</details> 
</post> 
</phplamp>
php
// 首先要建一個DOMDocument對象 
$xml = new DOMDocument(); 

// 載入Xml檔案 
$xml->load("me.xml"); 

// 擷取所有的post標籤 
$postDom = $xml->getElementsByTagName("post"); 

// 迴圈遍曆post標籤 
foreach($postDom as $post){ 
// 擷取Title標籤Node 
$title = $post->getElementsByTagName("title"); 

/** 
* 要擷取Title標籤的Id屬性要分兩部走 
* 1. 擷取title中所有屬性的列表也就是$title->item(0)->attributes 
* 2. 擷取title中id的屬性,因為其在第一位所以用item(0) 

* 小提示: 
* 若取屬性的值可以用item(*)->nodeValue 
* 若取屬性的標籤可以用item(*)->nodeName 
* 若取屬性的類型可以用item(*)->nodeType 
*/ 
echo "Id: " . $title->item(0)->attributes->item(0)->nodeValue . "<br />"; 
echo "Title: " . $title->item(0)->nodeValue . "<br />"; 
echo "Details: " . $post->getElementsByTagName("details")->item(0)->nodeValue . "<br /><br />"; 
}



總結: 使用DOMDocument解析xml檔案大概方法是: 1.  首先要建一個DOMDocument對象:     $xml = new DOMDocument();  2.載入xml檔案:  $xml->load("xmlfile.xml");  3.獲得對應的標籤:$xml->getElementsByTagName("A");      注意:     1>此時擷取到的並不是某一個具體的標籤,而是這一類標籤,相當於該標籤數組,所以要訪問那一個具體的標籤,還要通過 item(index)來擷取到第index+1個標籤。     2>通過$xml->item(insex)可以擷取到某個標籤,比如獲得下面這個A標籤:             <A  id="ia"  name="na" >                     <B1  id="b1">1 </B1>                     <B2   id="b2">2</B2>             <A>     A這個標籤有兩個屬性和兩個直接子節點。         擷取某屬性: $xml->item(insex)->attributes                 擷取第一個屬性id: $xml->item(insex)->attributes->item(0);                             如果是:echo  $xml->item(insex)->attributes->item(0);   則輸出結果是:id                擷取屬性的值:$xml->item(insex)->attributes->item(0)->nodeValue;                        如果是:echo  $xml->item(insex)->attributes->item(0)->nodeVale;   則輸出結果是:ia         擷取子節點:$xml->item(insex)->childNodes                擷取第一個子節點B1 :$xml->item(insex)->childNodes->item(0);                         如果是:echo  $xml->item(insex)->childNodes->item(0);    則輸出結果是:B1                擷取屬性的值:$xml->item(insex)->childNodes->item(0)->nodeValue;                        如果是:echo  $xml->item(insex)->childNodes->item(0)->nodeVale;   則輸出結果是:1         但是item(1)未必就是對應這下一個標籤,所以才有了例子1中的對nodeType的判斷。
DOM item() 方法詳解: http://www.w3school.com.cn/jsref/met_nodelist_item.asp DOM nodeType 屬性 http://www.w3school.com.cn/jsref/prop_node_nodetype.asp


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.