xml – XPath查找具有特定子节点的所有元素

前端之家收集整理的这篇文章主要介绍了xml – XPath查找具有特定子节点的所有元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你能帮我找到所有的元素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>

猜你在找的XML相关文章