2013-04-06 41 views
0

我正在嘗試搜索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

回答

-1

對於一個很好的和簡單的解決方案,使用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