2010-05-24 154 views
1

我試圖解析XML文件只與一個特定ID返回一個項目,但有麻煩 使其工作。解析XML與PHP和XPath

這裏就是我在PHP

$xml_str = file_get_contents("test.xml"); 
$xml = simplexml_load_string($xml_str); 
$albid = $_GET['id']; 

$nodes = $xml->xpath('//library/book[@id=1]'); 

foreach($nodes as $node) { 
echo $node['title'].'<br/>'; 
} 

首先,PHP是沒有返回XML文件中的任何東西。

我需要修復哪些數據才能返回數據?

另外,我怎麼會輸入$ albid到的XPath,以便ID將從鏈接檢索?

任何指針在正確的方向將不勝感激。

謝謝!

--and這裏的示例XML file--

<library> 
<book id="1"> 
    <title>PHP and MySQL</title> 
    <author fname="miguel" lname="alvarez">Miguel Alvarez</author> 
</book> 
<book id="2"> 
    <title>JAVA 123</title> 
    <author fname="william" lname="vega">WIlliam Vega</author> 
</book> 

+0

不要忘記你的結賬標籤。 – allnightgrocery 2010-05-24 18:35:51

回答

3

首先,你必須關閉<library>標籤,否則XML的格式不正確和解析將失敗。

的SimpleXMLElement :: XPath的()返回一個對象(ref),所以在循環內做到:echo $node->title.'<br/>';

獲得$ albid成字符串..好,使用字符串連接:$nodes = $xml->xpath('//library/book[@id='.$albid.']');

+0

非常感謝您解釋如何/爲什麼要更改代碼。 太棒了! – 2010-05-24 18:44:50

2

試試這個,

$xml_str = file_get_contents("test.xml"); 
$xml = simplexml_load_string($xml_str); 
$albid = $_GET['id']; 

$nodes = $xml->xpath("//library/book[@id=$albid]"); 

foreach($nodes as $node) { 
    echo $node->title.'<br/>'; 
} 
+0

有趣的是,它總是一小塊代碼。 我從上面開始工作,但感謝使用xpath的替代方法 – 2010-05-24 18:45:34