确定是否存在包含文本的兄弟节点

时间:2012-01-20 15:16:43

标签: xml xpath find selector

我想确定节点是否包含使用abc的字符串following-sibling

到目前为止,我正在遍历每个item节点,我想确定item是否包含node字符串abc

这是我到目前为止所尝试的:

contains(node/following-sibling::node[text()], 'abc')

XML:

<doc>
<item>
<node>1abc2</node>
<node>4</node>
<node>x</node>
</item>
<item>
<node>1</node>
<node>2abcX</node>
<node>x</node>
</item>
</doc>

2 个答案:

答案 0 :(得分:0)

这个XSL产生一个节点,只有一个“节点”,其后面有一个“节点”,字符串为“abc”。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 

<xsl:template match="/">
<doc>
    <xsl:for-each select='/doc/item/node[following-sibling::node[contains(.,"abc")]]'>
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:for-each>
</doc>
</xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

如果您要做的只是“确定item是否包含node字符串abc ,那么您不需要following-sibling。使用它来选择所有这样的节点:

node[contains(., 'abc')]

这与所提供的node个元素中的item相匹配。

如果您想检查孩子node是否有以下兄弟node,请使用:

node[following-sibling::node[contains(., 'abc')]]

这仅匹配第二个node中的第一个item

其中任何一个都可以明确地转换为boolean function的布尔值。例如:

boolean(node[following-sibling::node[contains(., 'abc')]])

如果表达式选择了至少一个节点(即节点集非空),则返回true。