从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函数可用,但它将所有字段的值一起返回,我无法排序哪些部分属于哪个字段。

在此先感谢您的帮助,这确实是在烦扰我。

+0

也许你困惑,因为你混的条款? '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

+0

你有一个小错误是说'$ node'是一个'DOMXPath',但它是'DOMNode'。 – hakre 2013-04-06 11:49:32

对于一个很好的和简单的解决方案,使用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 />"; 

看到真人演示@http://codepad.viper-7.com/ZRrUPl

+0

你好?为什么投票表决?请解释! – michi 2013-04-06 23:42:03