3

私は次のxslを持っています

<Root>
    <child>
       <Book name="Title" value="hailey" />
       <Book name="Title" value="After death" />
       <Book name="Price" value="100" />
    </child>
    <child>
       <Book name="Title" value="After death" />
       <Book name="genre" value="fiction" />
    </child>
</Root>

「子」ノードを反復処理したいのですが、「タイトル」が表示されている場合(少なくとも1回)、変数を設定したいと思います。xsltで次のコードを使用しています

<xsl:variable name="flag">
        <xsl:for-each select="/Root/Child" >
            <xsl:for-each select="./Book" >
                   <xsl:if test="./@name = 'Title'">
                    <xsl:value-of select="'true'"/>                     
                </xsl:if>
            </xsl:for-each>
        </xsl:for-each>


</xsl:variable>

問題は、変数「flag」が「truetruetrue」に設定されている場合の値ですが、単に「true」にしたい場合です。どんな助けでも大歓迎です

4

4 に答える 4

7

反復や条件付き命令はまったく必要ありません。このワンライナーを使用するだけです:

<xsl:variable name="vYourName" select="boolean(/Root/Child/Book[@name='Title'])"/>

この特定のXMLドキュメントの場合、これはさらに短く表現できます

<xsl:variable name="vYourName" select="boolean(/*/*/*[@name='Title'])"/>

説明

どちらの定義も、要素の少なくとも1つに属性がある場合に正確に指定さ"vYourName"れた変数を定義します。true()Root/Child/BookTitle

注意してください

  1. 定義上、関数($ ns)は、ノードセットが空でbooleanない場合にのみtrueを返します。$ns

  2. ブール値の文字列表現はtrue()文字列"true"です。

更新

コメントで、OPは尋ねました:

少なくとも1つのオカレンスがある場合、その「値」を変数に割り当てる方法はありますか?

答え:はい、「値」が最初の value属性を意味する場合は、次を使用します。

 <xsl:variable name="vYourName" select="(/*/*/*[@name='Title'])[1]/@value"/>
于 2012-06-18T11:59:04.170 に答える
0

あなたがあなたのコードに固執したいなら、

<xsl:variable name="flag">
    <xsl:for-each select="//Book" >
        <xsl:if test="@name = 'Title'">
            <xsl:value-of select="'true'"/>
        </xsl:if>
    </xsl:for-each>
</xsl:variable>
于 2012-06-18T11:54:50.490 に答える
0

テストされていません(そしてLuceroからのコメントのおかげで更新されました)...

<xsl:variable name="flag">
  <xsl:if test="count(/Root/Child/Book[@name='Title'])>0">true</xsl:if>
</xsl:variable>
于 2012-06-18T11:50:27.823 に答える
0
<xsl:variable name="flag">
   <xsl:if test="/Root/Child/Book/@name = 'Title'">
      <xsl:value-of select="'true'"/>                     
   </xsl:if>
</xsl:variable>
于 2012-06-18T11:51:05.390 に答える