2016-05-13 9 views
0

シンプルでクリーンな再帰的XSLTアイデンティティ変換(下記)の非再帰的な代替方法があるのでしょうか?再帰的なXSLTテンプレートはパフォーマンスに影響を与える可能性があるので、私は現在のプロジェクトでそれらを使用することを許可されていない可能性があります。XSLTの恒等変換の非再帰的な代替ですか?

アイデンティティ変換テンプレート:事前に

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

ありがとう!

+0

再帰を使用できない場合は、XSLTを使用できません。あなたの情報源は間違っています。 – EJP

+1

誰かが間違っていると言った。再帰的なテンプレートの使用にはパフォーマンス上の問題があるため、すべてのことを意味するわけではありません。あなたはラプターや何かに襲われることを心配する必要はありません。 – Flynn1179

+0

未熟なラップトップの回避はすべての悪の根源です。 – kjhughes

答えて

1

あなたの質問は完全には明確ではありません。アイデンティティ変換は、別のより具体的なテンプレートを使用して、一部のノードでそれを上書きする機会を提供するために使用されます。これは可能です恒等変換が再帰的であるためです。

あなたが唯一、例外なしに、あなたは、単に使用することができ、あるとして、すべてをコピーする場合:

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

これは、パフォーマンスを向上させるかどうかは別の問題です。

+0

マイケルに感謝します。私はいくつかのノードのためにそれを上書きしたいので、自分自身を明らかにするために何をしようとしているのは、再帰的テンプレートを使用しない限り不可能であるかどうかです。 – skrtxao

+1

まあ、いくつかのブランチを再帰的に(または階層的に)処理し、他のものを深くコピーすることができます。 [XSLT処理モデル](https://www.w3.org/TR/xslt/#section-Processing-Model)は、少なくとも概念的には再帰的です。 –

2

質問自体が間違っています。を推測していないをして、実際のボトルネックを最適化する -

は実際に、聞かせて、その最もエレガントな形で対策パフォーマンスを最適化についてのXSLTプロセッサの心配をあなたの変換を表現します。

これ以上の注意が必要なパフォーマンス上の問題がない可能性があります。あなたが本当に再帰を回避したい場合

2

は、あなたは基本的に3つのオプションを持っている:

  • いずれかを使用したテンプレート、任意の使用せずに、文書(/)に一致し、そのテンプレート内のすべての出力 を行います<xsl:apply-templates>です。 しかし、これは非常に悪いXSLTデザインです。あなたの全体のスタイルシートが実際にちょうど 出力XML/HTMLですが、XSL名前空間で宣言され、そして<xsl:value-of/>命令を使用してキー ポイントで、エレメント

  • はリテラル結果を使用してください。編集:それについて考えて、これはほとんど最初のオプションと同じです。

  • 可能であれば、タスクを拒否してください(推奨)。

関連する問題