如何检查标签是否包含特定字符串?

时间:2012-12-17 22:04:38

标签: xml xslt

我在xml中有这样的东西:

<doc>
  <people>
    <adress>
      <town>nameoftown</town>
    </adress>
  </people>
</doc>

我想检查标签城是否包含特定字符串。我知道我可以使用count函数但我想这样做:

XSL:

<ABC>   
   <xsl:variable name="counter" select="0"/>
    <xsl:for-each select="/doc/people/adress/town">
        <xsl:if test="contains(text(), 'nameoftown')">
     <xsl:variable name="counter" select="$counter+1"/>  
    </xsl:if>
  </xsl:for-each> 
 <xsl:value-of select="$counter"/>
</ABC>

2 个答案:

答案 0 :(得分:2)

XSLT是一种功能语言

除此之外,这意味着一旦定义(和初始化)的变量无法修改。

变量的不变性并不意味着任何可以通过修改变量以命令式方式/语言解决的问题都无法使用函数式语言来解决。

转向特定问题:您想要以非常复杂的方式进行的操作(7行)可以表示为简单的单行:

count(/*/*/*/town[contains(.,'nameoftown')])

答案 1 :(得分:0)

在XSLT中,空节点集的计算结果为false,因此您只需执行此操作:

<xsl:if test="/doc/people/adress/town[.='nameoftown']">
  Found at least one example of nameoftown
</xsl:if>