2012-01-01 103 views
0

我有下面的XML文檔:XPath查詢問題

<places xmlns="http://where.yahooapis.com/v1/schema.rng" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:start="0" yahoo:count="1" yahoo:total="1"> 
    <place yahoo:uri="http://where.yahooapis.com/v1/place/23424975" xml:lang="en-US"> 
     <woeid>23424975</woeid> 
     <placeTypeName code="12">Country</placeTypeName> 
     <name>United Kingdom</name> 
     <country type="Country" code="GB">United Kingdom</country> 
     <centroid> 
      <latitude>54.314072</latitude> 
      <longitude>-2.230010</longitude> 
     </centroid> 
     <boundingBox> 
      <southWest> 
       <latitude>49.162090</latitude> 
       <longitude>-13.413930</longitude> 
      </southWest> 
      <northEast> 
        <latitude>60.854691</latitude> 
       <longitude>1.768960</longitude> 
      </northEast> 
     </boundingBox> 
     <areaRank>11</areaRank> 
     <popRank>0</popRank> 
    </place> 
</places> 

我試圖捕捉 「WOEID」 值。但是我使用的「/ places/place/woeid」的XPath查詢不會捕獲它。

任何想法?

謝謝。

回答

2

您必須在查詢中指定一個名稱空間。如何設置名稱空間取決於您的XPath實現。但是您必須聲明http://where.yahooapis.com/v1/schema.rng命名空間,然後將其用作路徑表達式。因此,如果您將其聲明爲yahoo例如,您的XPath表達式看起來像/yahoo:places/yahoo:place/yahoo:woeid

或者,您的XPath實現可能允許您設置默認名稱空間,在這種情況下,您的原始查詢將正常工作。請注意,由於xmlns屬性沒有名稱空間前綴,因此所有封閉元素(未用其自身名稱空間覆蓋)屬於該名稱空間(Yahoo名稱空間)。所以名稱空間實際上是元素名稱的一部分。瞭解名稱空間如何工作對於使用XML非常重要。

1

集命名空間和前綴(如a)在您的XPath引擎,然後使用:

a:places/a:place/a:woeid 

或者乾脆:

*[local-name() = 'places']/*[local-name() = 'place']/*[local-name() = 'woeid']