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

前端之家收集整理的这篇文章主要介绍了xml – 使用xsl变量捕获调用模板的输出,为我返回空白前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我看过很多帖子都是这样做的,这让我觉得这是可能的,我只是做错了什么.我尽可能地简化了它,试图弄清楚为什么会这样:

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <REPORT>
  3.  
  4. </REPORT>

这是我的xsl:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  3. <xsl:template match="REPORT">
  4. <xsl:variable name="tryThisTemplate">
  5. <xsl:call-template name="TRY_THIS"/>
  6. </xsl:variable>
  7. <TEST1>
  8. <xsl:call-template name="TRY_THIS"/>
  9. </TEST1>
  10. <TEST2>
  11. <xsl:value-of disable-output-escaping="yes" select="$tryThisTemplate" />
  12. </TEST2>
  13. <TEST3>
  14. <xsl:value-of select="$tryThisTemplate" />
  15. </TEST3>
  16. </xsl:template>
  17.  
  18. <xsl:template name="TRY_THIS">
  19. <MY_NODE desc="my description" />
  20. </xsl:template>
  21. </xsl:stylesheet>

这是我的结果:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TEST1>
  3. <MY_NODE desc="my description"/>
  4. </TEST1>
  5. <TEST2></TEST2>
  6. <TEST3></TEST3>

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

这是执行此操作的正确方法(请注意,DOE不是必需的,应该避免):
  1. <xsl:stylesheet
  2. xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  3. <xsl:output omit-xml-declaration="yes" indent="yes"/>
  4.  
  5. <xsl:template match="REPORT">
  6. <xsl:variable name="tryThisTemplate">
  7. <xsl:call-template name="TRY_THIS"/>
  8. </xsl:variable>
  9. <TEST1>
  10. <xsl:call-template name="TRY_THIS"/>
  11. </TEST1>
  12. <TEST2>
  13. <xsl:copy-of select="$tryThisTemplate" />
  14. </TEST2>
  15. <TEST3>
  16. <xsl:copy-of select="$tryThisTemplate" />
  17. </TEST3>
  18. </xsl:template>
  19.  
  20. <xsl:template name="TRY_THIS">
  21. <MY_NODE desc="my description" />
  22. </xsl:template>
  23. </xsl:stylesheet>

当此转换应用于提供的XML文档时:

  1. <REPORT>
  2.  
  3. </REPORT>

产生了想要的结果:

  1. <TEST1>
  2. <MY_NODE desc="my description"/>
  3. </TEST1>
  4. <TEST2>
  5. <MY_NODE desc="my description"/>
  6. </TEST2>
  7. <TEST3>
  8. <MY_NODE desc="my description"/>
  9. </TEST3>

说明:< xsl:copy-of>副本(如其名称所示)节点. < XSL:value-of的>输出其select属性中的任何内容的字符串值.元素的字符串值是其所有文本节点后代的串联(按文档顺序).在您的情况下,元素没有文本节点后代,因此< xsl:value-of>没有输出.

猜你在找的XML相关文章