首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在XPath表达式中的多个子项目上使用concat()函数

如何在XPath表达式中的多个子项目上使用concat()函数
EN

Stack Overflow用户
提问于 2015-09-22 21:11:04
回答 2查看 942关注 0票数 2

像这样的东西可以很好地“concat”(‘a’,‘b’),但我不能把它作为现有表达式的一部分,即

代码语言:javascript
代码运行次数:0
运行
复制
<div class='xyz'>
    <strong>the</strong>
    <sub> one</sub>
</div>

//div[class='xyz']/concat(/strong/text(), /sub/text())

我想把它还给“那个”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-22 21:45:00

我想把它还给“那个”

XPath 1.0中,您必须这样做:

代码语言:javascript
代码运行次数:0
运行
复制
concat(div[@class='xyz']/strong, div[@class='xyz']/sub)

XSLT1.0中,您可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
<xsl:template match="/">
    <xsl:for-each select="div[@class='xyz']/*">
        <xsl:value-of select="."/>
    </xsl:for-each>
</xsl:template>
票数 3
EN

Stack Overflow用户

发布于 2015-09-22 21:23:01

我希望这是XPath 2.0?否则,concat()不能出现在表达式的/ (或|的任何一方)的rh端,因为它返回原子值,而不是节点。这个限制在XPath 2.0和更高版本中被删除了。

XPath 2.0

您的表达式几乎是正确的,区别是根节点。您使用/strong/sub启动了连接表达式,但是这些元素并不根植于文档根目录。表达式的rh-端接受表达式的lh侧的焦点,也就是说,它的焦点是div

代码语言:javascript
代码运行次数:0
运行
复制
//div[@class='xyz']/concat(strong/text(), sub/text())

此外(感谢Rubens),您需要属性class,而不是子元素class

如果元素不包含混合内容,并且对其中的所有文本数据感兴趣,则可以简化如下:

代码语言:javascript
代码运行次数:0
运行
复制
//div[@class='xyz']/concat(strong, sub)

XPath 1.0

如果您被困在XPath 1.0中,您可以执行以下操作,但(完全)不同:

代码语言:javascript
代码运行次数:0
运行
复制
concat(//div[@class='xyz']/strong, //div[@class='xyz']/sub)

如果要将其应用于所有div(如//所示),则应改用XSLT。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32727009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档