XSLT:为什么这不会产生空文档

时间:2017-04-28 13:17:51

标签: xslt xslt-1.0 xslt-2.0 saxon

我有一个XSLT文件

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                exclude-result-prefixes="msxsl">
  <xsl:template match="/RESULTS">
  </xsl:template>

</xsl:stylesheet>

和示例XML文件

<?xml version="1.0" encoding="utf-8"?>
<Report>
  <RESULTS>
       SOME DATA
  </RESULTS>
</Report>

当我运行转换时,我得到了

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

       SOME DATA

模板匹配子句正在寻找/ RESULTS并且数据中的根元素是Report,因此模板永远不会匹配任何内容,那么为什么它会返回源文件中的所有文本,尽管没有匹配任何模板?

我用Saxon和.Net的XSLT 1.0引擎进行了测试,结果是一样的,所以我猜它是故意的,但我找不到任何描述这种行为的东西。

1 个答案:

答案 0 :(得分:1)

此处的核心问题是,您的match="/RESULTS"模板规则仅匹配文档最外层的RESULTS元素(没有前导/,它会匹配任何地方)。因此,模板规则不匹配任何内容,这意味着源中的所有元素都由内置模板规则处理,包括文本节点,它们只是复制到结果中。