0

私は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>
4

2 に答える 2

2

XSLT は関数型言語です。

とりわけ、これは、一度定義 (および初期化) された変数を変更できないことを意味します。

変数の不変性は、変数を変更することによって命令的な方法/言語で解決できる問題が、関数型言語を使用して解決できないという意味ではありません。

特定の問題に目を向けると、非常に複雑な方法 (7 行) でやりたいことは、単純なワンライナーとして表現できます。

count(/*/*/*/town[contains(.,'nameoftown')])
于 2012-12-17T23:49:38.317 に答える
0

XSLT では、空のノード セットは false と評価されるため、次のように簡単に実行できます。

<xsl:if test="/doc/people/adress/town[.='nameoftown']">
  Found at least one example of nameoftown
</xsl:if>
于 2012-12-17T22:21:37.893 に答える