こんにちは私はhtmlページに変換する必要があるxmlファイルを持っています。以下のように、このファイルの構造である(簡体字):XMLソースの順序に則ったXSLTテンプレートを適用
<top>
<element>
<option id="SectionA">
<content id="ContentA1"></content>
<content id="ContentA2"></content>
<option id="ContentA3">
<content id="ContentA31"></content>
<content id="ContentA32"></content>
<option id="ContentA33"></option>
</option>
<content id="ContentA4"></content>
</option>
<option id="SectionB">
<content id="ContentA1"></content>
<content id="ContentA2"></content>
</option>
<option id="SectionC">
<content id="ContentA1"></content>
<content id="ContentA2"></content>
</option>
</element>
は私のXSLファイルは(簡体字)のようになります。
<?xml version="1.0" encoding="utf-8"?>
<xsl:template match="/">
<!-- Output html -->
<xsl:apply-templates select="top/elements"/>
</xsl:template>
<xsl:template match="top/elements">
<xsl:apply-templates select="option" />
</xsl:template>
<xsl:template match="option">
<!-- Output html -->
<xsl:if test="content">
<xsl:apply-templates select="content"/>
</xsl:if>
<xsl:if test="option">
<xsl:apply-templates select="option"/>
</xsl:if>
</xsl:template>
<xsl:template match="content">
<!-- Output html -->
</xsl:template>
変換は動作しますが、今私がする必要があります要素の順序が尊重されるような方法で出力を強制します。私が知る限り、テンプレートを使用すると、XSLはそのために定義されたすべての要素を反復処理します。したがって、最初に<xsl:apply-templates select="content" />
のoption-templateはすべてのcontent-elementを出力し、その後はすべてのoption-element(サブレベルにある)を出力します。問題は、XML文書と同じ順序を維持する必要があることです。だから、sectionAのための出力は次のようになります。代わりに私の解決策の出力の
- ContentA1
- ContentA2
- OptionA3
- ContentA4
:
- ContentA1
- ContentA2
- ContentA4
- OptionA3
だから、最初にすべてのContent-要素とオプションの要素よりも処理します。 出力のxmlに含まれる注文を強制的に強制することはできますか?
テンプレート 'match =" option "'を ':<! - Output html - > 'に書き直すことはできますか?いいえ、Ifs!明示的な要素の呼び出しはありません。代わりに、空の ' 'が作業をするようにしてください(ドキュメントオーダーは維持されます)。 –
uL1