浏览xml树并获取特定值

浏览xml树并获取特定值,xml,search,xpath,Xml,Search,Xpath,拥有此xml文档 <root> <bookstore> <presc:book> <presc:id>1</presc:id> <presc:title>Harry Potter</presc:title> <presc:price>29.99</presc:price> </presc:book> <

拥有此xml文档

<root>
<bookstore>
    <presc:book>
        <presc:id>1</presc:id>
        <presc:title>Harry Potter</presc:title>
        <presc:price>29.99</presc:price>
    </presc:book>
    <presc:book>
        <presc:id>2</presc:id>
        <presc:title>Learning XML</presc:title>
        <presc:price>39.95</presc:price>
    </presc:book>
    <presc:book>
        <presc:id>3</presc:id>
        <presc:title>Java for Life</presc:title>
        <presc:price>54.49</presc:price>
    </presc:book>
</bookstore>
</root> 

1.
哈利·波特
29.99
2.
学习XML
39.95
3.
Java终身服务
54.49
我只希望在“pres:id”=2的情况下获取“press:price”的值


感谢您的帮助。

首先,您需要关闭文档末尾的
节点。
然后,由于未声明
presc:
命名空间,因此需要使用
local-name()
函数,如下所示:

//*[local-name() = 'price' and ../id=2]

如果此XML声明了其
presc
名称空间,并且您在使用的XML API中声明了相同的名称空间,那么您尝试访问的节点将是

/root/bookstore/presc:book[presc:id = 2]/presc:price
如果XML已声明其名称空间,但您不确定如何在正在使用的XML API中声明它们,则可以通过执行以下操作来确定价格:

//*[*[local-name() = 'id'] = 2]/*[local-name() = 'price'] 

目前,您的XML不可用。

听起来像是无效的XML文档。请尝试
xmllint--valid file.xml
谢谢你。一切都好。