根据属性和节点值提取节点
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()
【讨论】:
以上是关于根据属性和节点值提取节点的主要内容,如果未能解决你的问题,请参考以下文章
使用xslt和c#从中选择一个xml节点并根据其值添加更多节点[重复]