如何获取所需的xpath元素?
问题描述:
我有一个xml文件,我想在一个变量中存储节点的rank属性。如何获取所需的xpath元素?
我想:
echo $var = $xmlobj->xpath("//Listing[@rank]");
无济于事,它只是打印ArrayArray。
这怎么办?
if($xmlobj = simplexml_load_string(file_get_contents($xml_feed)))
{
foreach($xmlobj as $listing)
{
// echo 'Session ID: ' . $sessionId = $listing->sessionId . '<br />';
// echo 'Result Set: ' . $ResultSet = $listing->ResultSet . '<br />';
print_r($xmlobj->xpath("//Listing[@rank]"));
// $result = $xmlobj->xpath("/page/");
// print_r($result);
}
}
Henrik的建议:
foreach($xmlobj as $listing)
{
$var = $xmlobj->xpath("//Listing[@rank]");
foreach ($var as $xmlElement)
{
echo (string)$xmlElement;
}
}
在这里,你去与发布示例XML玩耍后
<page>
<ResultSet id="adListings" numResults="3">
<Listing rank="1" title="Reliable Local Moving Company" description="TEST." siteHost="www.example.com">
</Listing>
答
编辑:
- 我最初的回答多少有些偏离轨道 - 铸造成字符串会给你内文本中选定的元件的,如果它们具有一个(而不是在这里的情况下)
-
"//Listing[@rank]"
选择所有“清单”的元素具有一个“秩”属性。如果你想选择的属性本身,用"//Listing/@rank"
- 要输出的属性,使用的SimpleXMLElement与数组语法:
$xmlElement['rank']
所以你的情况:
foreach($xmlobj as $listing)
{
$var = $xmlobj->xpath("//Listing/@rank");
foreach ($var as $xmlElement)
{
echo $xmlElement['rank'];
}
}
或
foreach($xmlobj as $listing)
{
$var = $xmlobj->xpath("//Listing[@rank]");
foreach ($var as $xmlElement)
{
echo $xmlElement['rank'];
echo $xmlElement['title']; // Added to demonstrate difference
}
}
应该工作。
在第一种情况中,$ XMLELEMENT将仅包含“秩”属性而在第二,它会包含完整的“清单”元件(因此允许的标题输出)。
感谢您的答复亨里克。不幸的是它不起作用,我的代码实现在上面? – 2009-10-01 15:33:34
嗯,奇怪 - 它打印什么? – 2009-10-01 15:35:33
只是一个空白屏幕,并没有错误 – 2009-10-01 15:39:55