2009-12-15 74 views
0

我有一個小的XML文件:PHP的SimpleXML使用XPath

<wddxPacket version='1.0'> 
    <header/> 
    <data> 
    <struct type='coldfusion.runtime.ArgumentCollection'> 
     <var name='HEADLINE'> 
     <string>Richard Barret's Articles on Leadership and High Performance Organisations</string> 
     </var> 
    </struct> 
    </data> 
</wddxPacket> 

我試圖使用PHP的SimpleXML和XPath提取的變數名稱HEADLINE元素字符串元素之間的值。此代碼的工作:

// Location of the XML file on the file system 
$file = 'http://10.10.200.37/skins/importscript/41802.xml'; 
$xml = simplexml_load_file($file); 

// CREATE THE ARRAYS FOR EACH XML ELEMENT NEEDED 

$title = $xml->xpath('//var[@name="HEADLINE"]'); 

echo "<p>"; 
print_r($title); 
echo "</p>"; 

的問題是,它不僅返回值,而且所有的陣列信息。如:

 
Array ( 
    [0] => SimpleXMLElement Object ( 
    [@attributes] => Array ( 
     [name] => HEADLINE 
    ) 
    [string] => Richard Barret's Articles on Leadership and High Performance Organisations 
) 
) 

我怎樣才能得到它僅返回值,而不是其他?

如果我將print_r替換爲echo $title;,我會在頁面上獲取單詞Array而不是值。如果我嘗試echo $title[0];,我什麼也得不到。

我已經嘗試了很多東西,現在想不出別的東西!我究竟做錯了什麼?任何人都可以將我指向正確的方向嗎?謝謝!

回答

11

對不起,請忽略此操作! 就在我發佈這個問題後,我意識到我做錯了什麼!

對於任何人是一樣慢今天我到這裏是問題...

$title = $xml->xpath('//var[@name="HEADLINE"]'); 

應該是:

$title = $xml->xpath('//var[@name="HEADLINE"]/string'); 

現在的作品,因爲它應該。

+0

+1。在Stack Overflow上再次投票並獲得您的第一張徽章是[Self-Learner]。這會讓你進入一個相當獨特的圈子 - 目前,超過117,000個用戶中只有262個擁有它。 ;) – Tomalak 2009-12-16 11:19:05

3

您對nodeValue感興趣。

實施例:

$xpath->evaluate("some_tag_name", $some_dom_element)->item(0)->nodeValue; 

,或者使用string選擇器:

$title = $xml->xpath('//var[@name="HEADLINE"]/string'); 
0

作爲習慣我總是從SimpleXML的

$title = (string) $xml->xpath('//var[@name="HEADLINE"]/string'); 

沒有得到值時,添加的 '字符串' 型當然,如果這是良好的做法..