像这样的东西可以很好地“concat”(‘a’,‘b’),但我不能把它作为现有表达式的一部分,即
<div class='xyz'>
<strong>the</strong>
<sub> one</sub>
</div>
//div[class='xyz']/concat(/strong/text(), /sub/text())
我想把它还给“那个”
发布于 2015-09-22 13:45:00
我想把它还给“那个”
在XPath 1.0中,您必须这样做:
concat(div[@class='xyz']/strong, div[@class='xyz']/sub)
在XSLT1.0中,您可以这样做:
<xsl:template match="/">
<xsl:for-each select="div[@class='xyz']/*">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>
发布于 2015-09-22 13:23:01
我希望这是XPath 2.0?否则,concat()
不能出现在表达式的/
(或|
的任何一方)的rh端,因为它返回原子值,而不是节点。这个限制在XPath 2.0和更高版本中被删除了。
XPath 2.0
您的表达式几乎是正确的,区别是根节点。您使用/strong
和/sub
启动了连接表达式,但是这些元素并不根植于文档根目录。表达式的rh-端接受表达式的lh侧的焦点,也就是说,它的焦点是div
。
//div[@class='xyz']/concat(strong/text(), sub/text())
此外(感谢Rubens),您需要属性class
,而不是子元素class
。
如果元素不包含混合内容,并且对其中的所有文本数据感兴趣,则可以简化如下:
//div[@class='xyz']/concat(strong, sub)
XPath 1.0
如果您被困在XPath 1.0中,您可以执行以下操作,但(完全)不同:
concat(//div[@class='xyz']/strong, //div[@class='xyz']/sub)
如果要将其应用于所有div(如//
所示),则应改用XSLT。
https://stackoverflow.com/questions/32727009
复制