2017-09-15 5 views
0

環境: XSLT 1.0なぜXSLTでない変換された予想出力

期待出力:レベル1とレベル2の両方テキスト出力

:実際の出力レベル2エレメント

ためのみがテキスト・ノード

XSL

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:output method="text"/> 

    <xsl:template match="/*"> 
    <xsl:apply-templates select="/data/section1" /> 
    </xsl:template> 

    <xsl:template match="level2"> 
    <xsl:value-of select="."/> 
    </xsl:template> 

</xsl:stylesheet> 

XML

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="SelectingAndMatching.xslt"?> 

<data> 
    <section1> 
    <level1>hello world 1</level1> 
    <level2>unlocked achievement level 2</level2> 
    </section1> 
    <section2> 
    <product1></product1> 
    <product2></product2> 
    <product3></product3> 
    </section2> 
</data> 

答えて

2

処理はすなわち、<xsl:apply-templates/>を行い、あなたが何のテンプレートがそうbuilt-in templateのいずれかが使用されていないているため、文書ノード/から始まり、あなたのケースでdata要素であるすべての子ノードを処理あなたのテンプレートで一致するmatch="/*"/data/section1を処理します。テンプレートがないので、<xsl:apply-templates/>の組み込みのものが使用されます。すなわち、section1のすべての子ノードを処理します。これにはテンプレートがあるため、level1の要素が含まれています。すべての子ノードを処理する組み込み関数が使用されます。これらのテキストノードでは、テンプレートを持たず、テキストノード用の組み込み関数も出力にコピーします。

+0

section1はlevel1とlevel2の要素を持っていますが、私はlevel2がほしいと思うでしょう。 – Rod

+0

したがって、おそらく私の選択は次のようになります: 'select ="/data/section1/level2 "' – Rod

+1

はい、 'これをに変更することをお勧めします。もう1つの解決策は、 'level1'要素が出力を生成しないことを確認することです。 '' –

関連する問題