【问题标题】:Extract nodes based on attribute and node values根据属性和节点值提取节点
【发布时间】:2013-06-11 01:57:20
【问题描述】:

对于下面的 XML,我正在尝试根据属性和节点值提取节点。

基于属性 class=pass 并且 h1 包含 ('objectives'),我正在尝试提取以下输出。

“目标”是节点值字符串“1任务目标”的一部分

1 任务目标 对象1 对象2

<body>
  <article>
    <body>
      <section>
        <h1>intro1</h1>
        <region>introd1</region>
        <region>introd2</region>
      </section>
      <section>
        <h1 class="pass">1 task objectives</h1>
        <region>object1</region>
        <region>object2</region>
      </section>
    </body>
  </article>
</body>

下面是我正在尝试的 XPath 表达式。但是,这并没有给出任何输出。你能指出我做错了什么吗?

//body//section//h1[contains(.,'objectives') and @class="pass"]/*/text()

感谢和问候, 西马克

【问题讨论】:

  • 当然,唐。我期望 h1 class=pass 和像 '%objectives%' 这样的元素值的输出是:1 task objectves object1 object2

标签: xml xpath


【解决方案1】:

您正在选择h1 元素,但仅在其子节点内操作。您需要的 xpath 表达式是:

//body//section//h1[contains(.,'objectives') and @class='pass']/../*/text()

注意..,它的作用域回到h1元素的父元素,然后对父元素的子元素进行操作。

【讨论】:

  • 太棒了。非常感谢。这有帮助。
【解决方案2】:

试试这个:

//body/section/h1[contains(.,'objectives') and @class='pass']/..//text()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多