从DOMXPath查询结果中获取属性值?
问题描述:
我正在尝试搜索XML文件并返回与给定条件匹配的记录的所有数据。这里是我现在的东西,它的搜索很好,但我似乎无法弄清楚如何获得同一记录中的其他属性的值。从DOMXPath查询结果中获取属性值?
下面是XML文件的样本将用于:
<routing>
<route>
<url>/homepage</url>
<file>/pages/home.php</file>
</route>
</routing>
这里是我如何找到文件中的特定记录或记录。它可以很好地发现它们,但是如何从匹配的记录中获取数据?
$qExp = '//route[url="/homepage"]';
foreach($inst->query($qExp) as $key=>$node) {
print_r($node);
// echo $node->file->nodeValue;
// how would I do this? I can't seem to
// access specific attributes at all
// inside of the DOMXPath class
}
一个DOMXPath对象将被存储在$node
,但我怎么能使用DOMXPath
对象来获取其他属性值?例如,第一个XML记录将由此查询返回,但是如何特别获取file
属性的值?我知道有一个nodeValue
函数可用,但它将所有字段的值一起返回,我无法排序哪些部分属于哪个字段。
在此先感谢您的帮助,这确实是在烦扰我。
答
对于一个很好的和简单的解决方案,使用simplexml
:
$xml = simplexml_load_string($x); // assuming XML in $x
$result = $xml->xpath("//route[url='/homepage']");
// loop
foreach ($result as $r) echo $r->file,"<br />";
// direct access
echo $result[0]->file,"<br />";
+0
你好?为什么投票表决?请解释! – michi 2013-04-06 23:42:03
也许你困惑,因为你混的条款? 'file'不是*属性,而是一个元素。您可以按照[从PHP中的DOMElement获取特定子标记]中概述的方式正常访问它(http://stackoverflow.com/questions/3816806/get-a-specific-child-tag-from-a-domelement-in- PHP)。另外,猜测出的'$ node-> file-> nodeValue'是两种不同类型的遍历的混合体:First SimpleXML和DOM。 – hakre 2013-04-06 11:45:14
你有一个小错误是说'$ node'是一个'DOMXPath',但它是'DOMNode'。 – hakre 2013-04-06 11:49:32