XPath查找具有特定子节点的所有元素
你能帮我find所有在下面的例子中具有子元素c的元素b吗?
<a> <b name = "b1"></b> <b name = "b2"><c/></b> <b name = "b3"></b> </a>
xpath查询必须返回b2元素
第二个问题是我想结合两个条件:我想获得具有名称=“b2”的元素,并具有元素c但是这个语法似乎不工作:// b [@ name ='b2'and c]
每当知道XML文档的结构时,最好避免使用XPath伪操作符 ,因为它的使用会导致很大的低效率(遍历整个文档树)。
因此,我为所提供的XML文档推荐了这个XPathexpression式:
/*/b[c]
这将select任何b
元素,它是XML文档顶部元素的子元素,并且具有名为c
的子元素。
更新 :OP在几分钟前问了一个secons问题:
第二个问题是我想结合两个条件:我想获得具有名称=“b2”的元素,并具有元素c但是这个语法似乎不工作:
//b[@name='b2' and c]
提供的XPathexpression式确实select了想要的元素。
这是基于XSLT的validation :
<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>
计算XPathexpression式,并将正确select的元素复制到输出中:
<b name="b2"> <c/> </b>
它应该如此简单
//b[c]
即find一个有孩子的地方。