完全な説明の前にそれらを読みたい場合は、私の質問はこの投稿の最後にあります。
XSL を使用して XML ドキュメントをきれいな Web ページに変換していますが、変数を正しく渡すことができません。多くxsl:template
の が定義されており、そのうちの 1 つだけに特定のパラメーターを渡す必要があります。おそらくすべての に送信される名前付きパラメーターを渡すことができることを望んでいましたがxsl:template
、1つだけで使用され、他の人には無視されます。しかし、これを自分自身 (および XSL に関する私の限られた理解) でテストしようとすると、パラメーターをまったく渡すことができず、ましてや他xsl:template
の s を誤って妨害していないかどうかをテストすることもできませんでした。
以下は単純化されたコード例です (この質問のために入力したものです。1 つまたは 2 つのタイプミスが含まれている可能性があります)。xsl:template
XML のノードを処理するためにさまざまなが定義されており、今まではすべて正常に機能していました。私が問題を抱えているように見えるのは、これらのテンプレートにパラメーターを追加することです。
XML ファイル:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="main.xsl"?>
<wrapperNode>
<testNode>
<subNode/>
</testNode>
</wrapperNode>
main.xsl:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="test.xsl"/>
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates>
<xsl:with-param name="testParam">TEST_PARAMETER</xsl:with-param>
</xsl:apply-templates>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
test.xsl:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="testNode">
<xsl:param name="testParam" />
TEST1
<xsl:value-of select="$testParam" />
TEST2
</xsl:template>
</xsl:stylesheet>
出力 (実際):
TEST1 TEST2
出力 (期待/望ましい):
TEST1 TEST_PARAMETER TEST2
これに関する私の質問:
with
xsl:template
を使用してすべての s に名前付きパラメーターを送信することは可能ですが 、実際のテンプレート内でこの値を具体的に選択して、単一のテンプレートで明示的に使用し、他のすべてのテンプレートで無視できるようにします (追加したい場合でも)後で他のテンプレート用の別の名前のパラメーター)?xsl:apply-templates
xsl:with-param
name=
パラメーターをまったく受け取っていないように見える現在のサンプル コードの何が間違っていますか?
これを達成するためのより良い方法はありますか?
編集:test.xsl
:testNode
テンプレート内の他の出力により、それが正常に呼び出されていることを確認していることを明確にしたいと思います。機能していないのはパラメーター部分のみです。そのテンプレートが呼び出されない理由を理解するために人々の時間を無駄にするつもりはありません。です。
更新:最初に受け取った回答に応えて、私が作成した例は完全に正しくなく (私の間違い)、問題を明確に示していなかった (つまり、正しいテンプレートが呼び出されているが、それはパラメータが機能していないようです)、例をより良いものに置き換えました。この例は、testNode
テンプレートが正常に呼び出されていることをより明確に示していますが、パラメーターは渡されていないようです。この質問に対する以前の回答を検討する前後に、これを何度もテストしました。私が他の場所で読んだことや人々がこれまでに提案したことからすべてが正しいように見えるので、私は完全に困惑しています.