我的问题在这篇文章的底部,如果你想在完整解释之前阅读它们。
我正在使用 XSL 将 XML 文档转换为漂亮的网页,并且无法正确传递变量。我xsl:template
定义了许多 s,并且需要将特定参数传递给其中一个。我希望我能够传递一个命名参数,该参数可能会被发送到所有的xsl:template
s,但只能被一个人使用而被其他人忽略。然而,当我试图为自己测试这个(以及我对 XSL 的有限理解)时,我根本无法传递参数,更不用说测试它是否意外地干扰了任何其他xsl:template
s。
以下是简化的示例代码(为此问题键入,可能包含一两个错字)。我定义了许多不同xsl:template
的 s 来处理 XML 中的节点,并且到目前为止一切正常。正是在向这些模板添加参数时,我似乎遇到了问题。
XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="main.xsl"?>
<wrapperNode>
<testNode>
<subNode/>
</testNode>
</wrapperNode>
主要的.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>
测试.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
我对此的问题:
xsl:template
是否可以使用xsl:apply-templates
with 向我的所有 s 发送一个命名参数xsl:with-param
,但在实际模板中专门选择此值,name=
以便它可以在单个模板中显式使用并被所有其他人忽略(即使我想添加其他模板的其他名称不同的参数)?我当前的示例代码做错了什么,它似乎根本没有收到参数?
有没有更好的方法来实现这一点?
编辑:我想明确指出,由于test.xsl
:testNode
模板中的其他输出,我确定它已被成功调用。只有参数部分不起作用。我并不是要浪费人们的时间来弄清楚为什么没有调用该模板。这是。
更新:针对我最初收到的答案,指出我编写的示例并不完全正确(我的错误)并且没有很清楚地显示问题(即:正在调用正确的模板,但仅该参数似乎不起作用),我已将示例替换为更好的示例。这个例子更清楚地表明testNode
模板被成功调用,但参数似乎没有被传递。在考虑这个问题的先前答案之前和之后,我已经测试了很多次。我完全被难住了,因为从我在别处读到的内容和人们迄今为止的建议来看,一切似乎都是正确的。