我有以下XML文档:
<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查询无法捕获它。
有什么想法吗?
感谢。
答案 0 :(得分:2)
您必须在查询中指定命名空间。如何设置命名空间取决于您的XPath实现。但是您必须声明http://where.yahooapis.com/v1/schema.rng
命名空间,然后使用它的路径表达式。因此,如果您将其声明为yahoo
,则您的XPath表达式将类似于/yahoo:places/yahoo:place/yahoo:woeid
。
或者,您的XPath实现可能允许您设置默认命名空间,在这种情况下,您的原始查询可以正常工作。
请记住,由于xmlns
属性没有名称空间前缀,所有包含的元素(没有用自己的名称空间覆盖)都属于该名称空间(Yahoo名称)。因此命名空间实际上是元素名称的一部分。了解命名空间的工作方式对于使用XML非常重要。
答案 1 :(得分:1)
在XPath引擎中设置名称空间和前缀(例如a
),然后使用:
a:places/a:place/a:woeid
或简单地说:
*[local-name() = 'places']/*[local-name() = 'place']/*[local-name() = 'woeid']