You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无匹配XSLT模板时,文本字符为何会被输出?

当不存在匹配的XSLT模板时,为何文本(字符)会被输出?

XML示例

<?xml version="1.0" encoding="utf-8" ?>
<base>
  <a>
    <b>B in a</b>
  </a>
  <c>
    <b>B in c</b>
  </c>
</base>

XSLT示例

<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
<output method="text"/>
  
<template match="/a">Found it!</template>

</stylesheet>

输出结果

B in a
B in c

原因说明

这是因为XSLT内置了默认模板规则,当没有自定义模板匹配当前节点时,就会触发这些默认模板:

  • 针对根节点和元素节点的默认模板:会自动递归处理该节点的所有子节点,继续尝试匹配子节点的模板
  • 针对文本节点的默认模板:会直接输出文本内容

回到这个例子:

  • XSLT里的模板match="/a"是匹配根节点下的<a>元素,但XML的根节点是<base>,这个模板根本不会被触发
  • 处理流程从根节点<base>开始,因为没有匹配的自定义模板,触发元素默认模板,递归处理子节点<a>和<c>
  • 处理<a>时同样没有匹配模板,继续递归处理其子节点<b>;<b>也没有匹配模板,递归处理里面的文本节点
  • 文本节点触发默认模板,直接输出"B in a";同理<c>下的文本节点也被输出,最终得到你看到的结果

内容的提问来源于stack exchange,提问作者tm1701

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 06:54:06