【问题标题】:xpath expression with predicates to get node value from xml with namespace带有谓词的 xpath 表达式从带有命名空间的 xml 中获取节点值
【发布时间】:2013-09-13 10:06:58
【问题描述】:

我希望在 2000 年之前出版所有书名

XML

<bookstore xmlns:old="http://www.w3.org/TR/html4/" xmlns:new="http://www.w3.org/1999/XSL/Transform">
<old:book>
    <old:title lang="en">Harry Potter I</old:title>
    <old:author>J K. Rowling</old:author>
    <old:year>1997</old:year>
    <old:price>450</old:price>
</old:book>
<old:book>
    <old:title lang="hn">Malgudi Days </old:title>
    <old:author>R.K. Narayan </old:author>
    <old:year>2006</old:year>
    <old:price>160</old:price>
</old:book>

<new:book>
    <new:title lang="en">Can Love Happen Twice?</new:title>
    <new:author>Ravinder Singh</new:author>
    <new:year>2011</new:year>
    <new:price>150</new:price>
</new:book>
<new:book>
    <new:title lang="en">The Lowland</new:title>
    <new:author>Jhumpa Lahiri</new:author>
    <new:year>2013</new:year>
    <new:price>240</new:price>
</new:book>

我正在使用表达式获取所有标题

pathExpr = "/bookstore/*[local-name() = 'book']/*[local-name() = 'title']";

现在我想添加条件(年 > 2000)。我试过了

pathExpr = "/bookstore/*[local-name() = 'book'][local-name() = 'year' < 2000]/*[local-name() = 'title']";

还有这个

pathExpr = "/bookstore/*[local-name() = 'book']||[local-name() = 'year' < 2000]/*[local-name() = 'title']";    

但它不起作用。 不知道如何处理命名空间。 提前致谢。

【问题讨论】:

    标签: xml xpath xml-namespaces


    【解决方案1】:

    这应该可行:

    /bookstore/*[local-name() = 'book']
                [./*[local-name() = 'year'] < 2000]/*[local-name() = 'title']
    

    我在你的测试中添加了./*[...] year book 的孩子

    • ./*[local-name() = 'year']选择子节点
    • [./*[local-name() = 'year'] &lt; 2000] 测试它的内容值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 2011-01-05
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多