1

XSLTのforeachステートメント内にif-elseステートメントを挿入しようとしています。アイデアは、ノードが存在する場合、それは改行を挿入するということです。これは私がこれまでに持っているものです

<xsl:for-each select="Books/Publisher/[BookTitle]">
                  <strong>
                    <xsl:value-of select=" BookTitle " />
                  </strong>
<xsl:if test=" Books/Publisher/BookTitle">!= ''">
        <br/>  
      </xsl:if>
</xsl:for-each>

問題は、if-elseステートメントを挿入すると改行タグが表示されないが、if elseを完全に削除した場合にのみ機能することです。ノードが存在することを確認したため、誰かがこれが発生する理由を説明できますか?改行を挿入すると機能するはずです。したがって、foreachループ内のif-elseに問題があるはずです。

4

1 に答える 1

4

私はあなたがしようとしているのはこれだと思います:

<xsl:for-each select="Books/Publisher[BookTitle]">
  <strong>
    <xsl:value-of select="BookTitle" />
  </strong>
  <xsl:if test="BookTitle != ''">
    <br/>
  </xsl:if>
</xsl:for-each>

しかし、私が正しく理解していれば、あなたが本当にやろうとしているのは、空白でない本のタイトルをすべて出力し、その後に改行を付けることだけのように見えるので、おそらくこれはより良いアプローチでしょう:

<xsl:for-each select="Books/Publisher/BookTitle[. != '']">
  <strong>
    <xsl:value-of select="." />
  </strong>
  <br/>
</xsl:for-each>

またはさらに良い:

<xsl:apply-templates select="Books/Publisher/BookTitle[. != '']" />

<!-- .....  (separate template in the XSLT) -->
<xsl:template match="BookTitle">
  <strong>
    <xsl:value-of select="." />
  </strong>
  <br/>
</xsl:template>
于 2013-02-04T04:09:15.597 に答える