相关疑难解决方法(0)

XSL使用'apply-templates'命名参数'with-param'

如果你想在完整的解释之前阅读它们,我的问题就在这篇文章的底部.

我正在使用XSL将XML文档转换为漂亮的网页,并且无法正确传递变量.我xsl:template定义了很多,并且需要将特定参数传递给其中一个.我希望我能够传递一个命名参数,该参数可能被发送到所有xsl:templates,但只能被一个人使用而被其他人忽略.然而,当我试图为自己测试这个(以及我对XSL的有限理解)时,我根本无法传递参数,更不用说测试它是否意外地干扰了任何其他xsl:template的.

以下是简化的示例代码(为此问题键入,可能包含一两个错字).我有很多不同xsl:template的定义来处理XML中的节点,到目前为止一切都运行良好.在为这些模板添加参数时,我似乎遇到了问题.

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="main.xsl"?>
<wrapperNode>
  <testNode>
    <subNode/>
  </testNode>
</wrapperNode>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

输出(实际):

TEST1 TEST2
Run Code Online (Sandbox Code Playgroud)

输出(预期/期望):

TEST1 TEST_PARAMETER TEST2
Run Code Online (Sandbox Code Playgroud)

我对此有疑问:

  1. 是否可以xsl:template使用xsl:apply-templateswith 向我的所有s 发送命名参数 xsl:with-param,但name= …

xslt parameters stylesheet apply-templates

18
推荐指数
1
解决办法
4万
查看次数

使用xsl变量来捕获调用模板的输出,为我返回空白

我看过很多帖子都做了这样的事情,这让我觉得这是可能的,我只是做错了什么.我尽可能简化了它,试图弄清楚为什么会发生这种情况:

继承人我的xml(没什么好激动的):

<?xml version="1.0" encoding="UTF-8"?>
<REPORT>

</REPORT>
Run Code Online (Sandbox Code Playgroud)

这是我的xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:template match="REPORT">
      <xsl:variable name="tryThisTemplate">
        <xsl:call-template name="TRY_THIS"/>
      </xsl:variable>
      <TEST1>
        <xsl:call-template name="TRY_THIS"/>
      </TEST1>
      <TEST2>
        <xsl:value-of disable-output-escaping="yes" select="$tryThisTemplate" />
      </TEST2>
      <TEST3>
        <xsl:value-of select="$tryThisTemplate" />
      </TEST3>
    </xsl:template>

    <xsl:template name="TRY_THIS">
      <MY_NODE desc="my description" />
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

这是我的结果:

<?xml version="1.0" encoding="utf-8"?>  
<TEST1>
  <MY_NODE desc="my description"/>
</TEST1>
<TEST2></TEST2>
<TEST3></TEST3>
Run Code Online (Sandbox Code Playgroud)

这是我的问题:为什么TEST2和TEST3不起作用.$ tryThisTemplate变量似乎为空.我在这里误解了什么.我应该以不同的方式做这件事吗?

xml xslt transform

8
推荐指数
1
解决办法
3万
查看次数

标签 统计

xslt ×2

apply-templates ×1

parameters ×1

stylesheet ×1

transform ×1

xml ×1