根据属性和节点值提取节点

Posted

技术标签:

【中文标题】根据属性和节点值提取节点【英文标题】: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 【参考方案1】:

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

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

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

【讨论】:

太棒了。非常感谢。这有帮助。【参考方案2】:

试试这个:

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

【讨论】:

以上是关于根据属性和节点值提取节点的主要内容,如果未能解决你的问题,请参考以下文章

使用 DOM 解析器根据父节点属性检索子节点值

根据属性值移除 XML 节点

使用xslt和c#从中选择​​一个xml节点并根据其值添加更多节点[重复]

如何使用 boost 属性树提取 xml 文件的 DOCTYPE 节点?

根据XPath中子节点的double值查找父节点

java中如何读取xml中数据。多节点的。给我一个例子,谢谢。