使用 xsl 变量捕获为我返回空白的调用模板的输出
我看过很多类似这样的帖子,这让我觉得这是可能的,而我只是做错了事。我已经尽可能地简化了它,试图找出为什么会发生这种情况:
这是我的 xml(没什么令人兴奋的):
<?xml version="1.0" encoding="UTF-8"?>
<REPORT>
</REPORT>
这是我的 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>
这是我的结果:
<?xml version="1.0" encoding="utf-8"?>
<TEST1>
<MY_NODE desc="my description"/>
</TEST1>
<TEST2></TEST2>
<TEST3></TEST3>
这是我的问题: 为什么 TEST2 和 TEST3 不起作用。 $tryThisTemplate 变量似乎为空。我是否误解了什么?我应该以不同的方式做这件事吗?
I have seen lots of posts that do something like this and that makes me feel like this is possible and I am just doing something wrong. I have simplified it as much as possible to try and figure out why this is happening:
Heres my xml (nothing very exciting):
<?xml version="1.0" encoding="UTF-8"?>
<REPORT>
</REPORT>
Here is my 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>
Here is my result:
<?xml version="1.0" encoding="utf-8"?>
<TEST1>
<MY_NODE desc="my description"/>
</TEST1>
<TEST2></TEST2>
<TEST3></TEST3>
Here is my question:
How come TEST2 and TEST3 don't work. The $tryThisTemplate variable appears to be blank. Am I misunderstanding something here. Should I be doing this in a different way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
以下是执行此操作的正确方法(请注意,DOE 不是必需的,应该避免):
当此转换应用于提供的 XML 文档时:
产生了想要的结果:
解释:
复制(正如其名称所示)节点。
输出其select
属性中的任何内容的字符串值。元素的字符串值是其所有文本节点后代的串联(按文档顺序)。在您的情况下,该元素没有文本节点后代,因此
不输出任何内容。Here is the correct way to do this (note that DOE is not necessary and should be avoided):
when this transformation is applied on the provided XML document:
the wanted result is produced:
Explanation:
<xsl:copy-of>
copies (as its name says) nodes.<xsl:value-of>
outputs the string value of whatever is in itsselect
attribute. The string value of an element is the concatenation (in document order) of all of its text-node descendents. In your case the element has no text-node descendents and thus<xsl:value-of>
outputs nothing.是的,这里有一个误解。如果您尝试将
$tryThisTemplate
的结构复制到输出,则需要使用
而不是
。
输出其 select 参数的字符串值,即其文本内容,在本例中为空字符串。Yes there is a misunderstanding here. If you are trying to copy the structure of
$tryThisTemplate
to the output, you need to use<xsl:copy-of>
instead of<xsl:value-of>
.<xsl:value-of>
outputs the string value of its select argument, that is, its text content, which in this case is an empty string.该变量不是空的,但使用
xsl:value-of
您需要提供其中的文本节点。这就是“空白”。例如,尝试使用:
您会看到
MY_NODE
神奇地出现在TEST3
之间:))The variable it's not blank, but with
xsl:value-of
you are asking for the text nodes inside that. That's "blank".For instance, try with:
And you'll see magically appear
MY_NODE
betweenTEST3
:))查看我的解决方案
,这是我的模板(是可验证的内容)
,当我在任何其他模板中使用它时,我只是这样称呼它
希望这对您有帮助
check out my solution
here is my template (was veriable content)
and when I use it in any other template simply I just call it like this
hope this helps you