为什么xsl:template match会输出XSLT中未引用的节点值
问题原因
这是XSLT的内置默认模板规则导致的,XSLT解析器在没有找到用户自定义的匹配模板时,会自动调用内置的默认模板处理节点,默认规则如下:
- 元素节点/根节点规则:递归遍历当前节点的所有子节点,继续应用匹配模板处理
- 文本节点/属性节点规则:直接将节点的文本内容输出到结果中
你当前的XSLT没有自定义任何模板,因此解析器会从XML根节点开始递归遍历所有元素,碰到文本节点就直接输出,最终所有文本内容被拼接输出,就是你看到的结果。
解决方法
如果要实现仅输出明确映射的节点,你只需要覆盖根节点的默认模板,阻止默认的递归遍历行为即可,参考写法:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <!-- 在这里仅编写你需要明确输出的节点映射逻辑即可 --> </xsl:template> </xsl:stylesheet>
内容的提问来源于stack exchange,提问作者Venkateshwaran Sundar
相关产品推荐
相关产品推荐

