2012-01-20 46 views
1

我想确定节点是否包含使用following-sibling的字符串abc确定是否存在包含文本的兄弟节点

到目前为止我循环通过每个节点item,我想,以确定是否是item包含字符串abc

这是一个node是我试过到目前为止:

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> 

回答

0

如果你正在试图做的一切都是“确定该item包含字符串abc一个node那么你不需要following-sibling。使用此选择所有这些节点:

node[contains(., 'abc')] 

这符合中提供两个item元素node

如果您要检查有以下兄弟node与文本孩子node,然后使用:

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

这仅匹配在第二item第一node

其中任何一个都可以通过boolean function显式转换为布尔值。例如:

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

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

0

该XSL生成单个节点,只有1个“节点”具有“节点”跟着它与字符串“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> 
相关问题