你能帮我找到所有的元素b在下面的例子中有子元素c?
<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]
这将选择作为XML文档的顶层元素的子元素并且具有名为c的子元素的任何b元素。
更新:OP刚刚几分钟前问了一个secons问题:
The second question is I want to combine 2 conditions: I want to get
the element which have name = “b2” and has the element c But this
Syntax seems not to work://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>