Xml XPath查询问题
我有以下XML文档:Xml XPath查询问题,xml,xpath,Xml,Xpath,我有以下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:l
<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>
23424975
国家
大不列颠联合王国
大不列颠联合王国
54.314072
-2.230010
49.162090
-13.413930
60.854691
1.768960
11
0
我试图捕捉“woeid”值。但是我使用的XPath查询“/places/place/woeid”没有捕获它
有什么想法吗
谢谢。您必须在查询中指定名称空间。如何设置名称空间取决于XPath实现。但是您必须声明
http://where.yahooapis.com/v1/schema.rng
命名空间,然后将其用于路径表达式。因此,如果您将其声明为yahoo
,那么您的XPath表达式将类似于/yahoo:places/yahoo:place/yahoo:woeid
或者,您的XPath实现可能允许您设置默认名称空间,在这种情况下,您的原始查询可以正常工作
请记住,由于
xmlns
属性没有名称空间前缀,因此所有包含的元素(没有用自己的名称空间覆盖)都属于该名称空间(Yahoo名称空间)。因此名称空间实际上是元素名的一部分。了解名称空间的工作方式对于使用XML非常重要。您必须在查询中指定名称空间。如何设置名称空间取决于XPath实现。但是您必须声明http://where.yahooapis.com/v1/schema.rng
命名空间,然后将其用于路径表达式。因此,如果您将其声明为yahoo
,那么您的XPath表达式将类似于/yahoo:places/yahoo:place/yahoo:woeid
或者,您的XPath实现可能允许您设置默认名称空间,在这种情况下,您的原始查询可以正常工作
请记住,由于xmlns
属性没有名称空间前缀,因此所有包含的元素(没有用自己的名称空间覆盖)都属于该名称空间(Yahoo名称空间)。因此名称空间实际上是元素名的一部分。了解名称空间的工作方式对于使用XML非常重要。在XPath引擎中设置名称空间和前缀(例如a
),然后使用:
a:places/a:place/a:woeid
或者简单地说:
*[local-name() = 'places']/*[local-name() = 'place']/*[local-name() = 'woeid']
在XPath引擎中设置名称空间和前缀(例如a
),然后使用:
a:places/a:place/a:woeid
或者简单地说:
*[local-name() = 'places']/*[local-name() = 'place']/*[local-name() = 'woeid']