【问题标题】:XSLT : Why doesn't this produce an empty documentXSLT:为什么这不会产生一个空文档
【发布时间】:2017-04-28 13:17:51
【问题描述】:

我有一个 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 引擎对此进行了测试,结果是一样的,所以我猜这是故意的,但我找不到任何描述这种行为的东西。

【问题讨论】:

标签: xslt xslt-1.0 xslt-2.0 saxon


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 2022-10-14
    • 1970-01-01
    • 2011-12-08
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    相关资源
    最近更新 更多