您能帮我找到下面示例中所有具有子元素 c 的元素 b 吗?
<a>
<b name = "b1"></b>
<b name = "b2"><c/></b>
<b name = "b3"></b>
</a>
xpath 查询必须返回 b2 元素
第二个问题是我想结合 2 个条件:我想获取具有 name = "b2" 并且具有元素 c 的元素 但是这种语法似乎不起作用: //b[@name='b2' and c]
当 XML 文档的结构已知时,最好避免使用//
XPath 伪操作符,因为使用它会导致效率低下(遍历整个文档树)。
因此,我为提供的 XML 文档推荐了这个 XPath 表达式:
/*/b[c]
这将选择b
作为 XML 文档顶部元素的子元素并且具有名为 的子元素的任何元素c
。
更新: OP 几分钟前问了第二个问题:
第二个问题是我想结合 2 个条件:我想获取具有 name = "b2" 并且具有元素 c 的元素但是这种语法似乎不起作用:
//b[@name='b2' and c]
提供的 XPath 表达式确实选择了想要的元素。
这是基于 XSLT 的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy-of select="//b[@name='b2' and c]"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于提供的 XML 文档时:
<a>
<b name = "b1"></b>
<b name = "b2"><c/></b>
<b name = "b3"></b>
</a>
计算 XPath 表达式并将正确选择的元素复制到输出:
<b name="b2">
<c/>
</b>
它应该像这样简单
//b[c]
即找到一个b
有c
孩子的地方。