2008-10-23 175 views
18

這裏的XML代碼,我的工作:XPath查詢與PHP

<inventory> 
    <drink> 
     <lemonade supplier="mother" id="1"> 
      <price>$2.50</price> 
      <amount>20</amount> 
     </lemonade> 
     <lemonade supplier="mike" id="4"> 
      <price>$3.00</price> 
      <amount>20</amount> 
     </lemonade> 
     <pop supplier="store" id="2"> 
      <price>$1.50</price> 
      <amount>10</amount> 
     </pop> 
    </drink> 
</inventory> 

然後我寫了一個簡單的代碼來練習使用XPath:

<?php 
    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml'); 

    $xpathvar = new Domxpath($xmldoc); 

    $queryResult = $xpathvar->query('//lemonade/price'); 
    foreach($queryResult as $result) { 
     echo $result->textContent; 
    } 
?> 

該代碼運作良好,輸出所有的檸檬水價格值如預期。現在,當我改變查詢字符串只選擇設置爲特定值的屬性的元素,如

//檸檬水[供應商=「母親」] /價格

//檸檬水[ID = 「1」] /價格

它不會工作,沒有輸出。我究竟做錯了什麼?

回答

32

試試這個:

//lemonade[@id="1"]/price 

//lemonade[@supplier="mother"]/price 

沒有 「@」 它看起來具有該名稱,而不是屬性的子元素。

6

您必須使用@符號來表示謂詞中的屬性,如://lemonade[@supplier="mother"]/price,就是這樣。

7

這只是切線相關的,但是當您在知道該結構的文檔上使用XPath時,請勿使用使用「// some-element-name」。這是一個很好的例子,但是當你用這個查詢命中一個巨大的XML文件時,特別是如果後面跟着一些複雜的東西時,你會很快遇到性能問題。

庫存/飲料/檸檬水[@供應商=「母親」] /價格