web-dev-qa-db-ja.com

XSLT-すべての子ノードをループします

撮影しないでください私はここのメッセンジャーですが、次のような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

重要な場合は、XSLT1.0の使用に制限されています

ありがとう!

6
dscl

これは基本的な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"は、@が属性の選択に使用されることを除いて、select = "@value"の値と同様に自明である必要があります。

幸運を。この本を読むことをお勧めします XSLT 2. 。 XSLTに関するすばらしい本。

11
PhillyNJ

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>
19
dscl