2012-12-07 42 views
2

如何在for循環中的當前SimpleXMLElement對象上運行Xpath查詢。例如,for循環中當前SimpleXMLElement對象的Xpath查詢

<?php 
$xml = simplexml_load_string('<?xml version="1.0" encoding="ISO-8859-1"?> 

<bookstore> 

<book> 
    <title lang="eng">Harry Potter</title> 
    <price>29.99</price> 
</book> 

<book> 
    <title lang="eng">Learning XML</title> 
    <price>39.95</price> 
</book> 

</bookstore> '); 


foreach ($xml as $value) { 
    $result = $value->xpath('//title'); 
    var_dump($result); 
    break; 
} 
?> 

array 
    0 => 
    object(SimpleXMLElement)[189] 
     public '@attributes' => 
     array 
      'lang' => string 'eng' (length=3) 
     string 'Harry Potter' (length=12) 
    1 => 
    object(SimpleXMLElement)[188] 
     public '@attributes' => 
     array 
      'lang' => string 'eng' (length=3) 
     string 'Learning XML' (length=12) 

這會輸出兩個書籍元素的結果,而這是我的意圖,只顯示第一個。我試圖查詢運行只有對for循環中的$ value對象,因爲我可能想要在每本書上運行不同的查詢(所以它必須在一個循環!)不是在每一本書是什麼目前正在做。

回答

0

//從當前節點中選擇與選擇相匹配的文檔中的節點,而不管它們位於何處。

當我運行查詢從根中選擇所有節點時,我已經在所需節點(例如$ value)中,因此從所有節點獲取信息。

因爲我已經在所需的節點元素刪除//獲得預期的結果,在當前節點上運行查詢。

+0

//從根節點選擇文檔中的標籤,而不是從當前節點中選擇標籤 – Benjamin

4

您可以使用.來表示當前節點。因此,./Foo選擇名爲Foo的直接子女,並且.//Foo選擇名爲Foo的所有後代。

如果沒有點,//被認爲是指文檔的根,並在整個文檔中選擇所有名爲Foo的選項。