2012-02-01 91 views
2

我正在尋找一個xml文件,看起來像這樣:搜索和打印XML使用XPath

<producers> 
    <producer> 
    <name></name> 
    <owner></owner> 
    <phone></phone> 
    <fax></fax> 
    <overview></overview> 
    <address> 
     <civic></civic> 
     <mailing></mailing> 
     <town></town> 
     <province></province> 
     <postal></postal> 
     <email></email> 
     <website></website> 
    </address> 
    <products> 
     <product>Salmon</product> 
     <product>Trout</product> 
    </products> 
    <exports> 
     <region>Canada</region> 
     <region>United States</region> 
    </exports> 
    </producer> 

然後我尋找它,像這樣:

$upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÂÆÇÈÉÊËÎÏÔŒÙÛÜ"; 
$lower = "abcdefghijklmnopqrstuvwxyzàâæçèéêëîïôœùûü"; 

$region = "Canada"; 

$node = $xml->xpath('//producers/producer/exports[descendant::*[contains(translate(text(), "'.$upper.'", "'.$lower.'"), "'.$region.'")]]'); 

問題是我希望能夠打印整個生產者。但是我現在所能夠接觸到的是任何出口後裔的內容。有沒有一種方法可以返回幾個節點來檢索所需製作者的完整列表?

回答

1

我想你只需要把/../../放在xpath的末尾。這樣

$node = $xml->xpath('//producers/producer/exports[descendant::*[contains(translate(text(), "'.$upper.'", "'.$lower.'"), "'.$region.'")]]/../../'); 
+0

這符合我需要做的。謝謝! – jasonaburton 2012-02-01 13:40:02

1

您可以使用此XPath的東西,這是更具可讀性:

$node = $xml->xpath('//producers/producer[exports/region[contains(translate(text(), "'.$upper.'", "'.$lower.'"), "'.$region.'")]]'); 

這將選擇所需producer

+1

這看起來更乾淨,但不幸的是,我正在用xpath語句執行幾種不同類型的搜索。但這確實有助於我更好地理解這一點。謝謝。 – jasonaburton 2012-02-01 13:39:41

+0

@jasonaburton,歡迎。 – 2012-02-01 13:41:39