8

撮影しないでください私はここではただのメッセンジャーですが、次のような xml があります

<XMLSnippet>
    <data>
        <stuff value="stuff" />
        <stuff value="more stuff" />
        <stuff value="even more stuff" />
        <widget value="you expected stuff didn't you" />
        <stuff value="great, we've got stuff again" />
    </data>
</XMLSnippet>

dataそして、すべての子ノードをループして、次を出力したいと思います

stuff
more stuff
even more stuff
you expected stuff didn't you
great, we've got stuff again

XSLT 1.0 の使用に制限されています

ありがとう!

4

2 に答える 2

22

Phil と Alexandre の提案のおかげで、ここに私が働いたコードがあります

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/XMLSnippet">
       <xsl:for-each select="data/*">
          <xsl:value-of select="@value" />
       </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>
于 2013-09-10T01:07:32.083 に答える
13

これは基本的な XSLT の質問なので、この投稿では xsl の経験がほとんどないことを前提としています。xslt が XML ドキュメントを処理する方法を理解する必要がありますが、これはこの投稿の範囲を超えています。それでも、これで始められるはずです。必要な出力を取得する方法はいくつかありますが、これはその 1 つにすぎないことに注意してください。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match="XMLSnippet">
    <xsl:for-each select="data/stuff">
        <xsl:value-of select="@value"/>
    </xsl:for-each>
</xsl:template>

まず、テンプレートの match="/" がエントリ ポイントです。apply-templates は、コンテキスト内のノードのテンプレートを適用するよう xslt プロセッサに指示する xslt 命令です。この場合、ルート ノード「XMLSnippet」です。

@ が属性の選択に使用されていることを除いて、for-each select="data/stuff" は、value-of select="@value" と同様に自明である必要があります。

幸運を。この本XSLT 2.0を読むことをお勧めします。XSLT に関する素晴らしい本。

于 2013-09-09T21:22:59.630 に答える