2010-05-24 148 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