加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 08:07:20 所属栏目:百科 来源:网络整理
导读:你能帮我找到所有的元素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 =
你能帮我找到所有的元素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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读