XSLT生成纯文本的关键是设置<xsl:output method="text">并禁用自动格式化:需指定method="text"、indent="no"、encoding="UTF-8",用<xsl:text>和<xsl:value-of>直出内容,配合<xsl:strip-space>及紧凑模板写法控制空白。

用 XSLT 生成纯文本文件,关键在于正确设置 <xsl:output method="text">,并避免 XML/HTML 默认的格式化行为(如自动缩进、添加声明、转义特殊字符等)。
基础配置:指定 text 输出方法
在样式表根元素内添加输出声明,明确告诉处理器你想要纯文本:
-
<xsl:output method="text" encoding="UTF-8"/>—— 最简必要配置 - 推荐加上
indent="no"防止 XSLT 处理器(尤其是某些支持 HTML 模式的处理器)自动插入空格或换行 - 若需 Windows 换行符,可加
media-type="text/plain"(非必需,但部分环境更稳妥)
内容组织:只输出你想要的文本
使用 <xsl:text> 和 <xsl:value-of> 直接拼接内容,不包裹任何标签:
<xsl:text>Hello, </xsl:text><xsl:value-of select="name"/><xsl:text>!</xsl:text>- 避免写
<p><xsl:value-of.../></p>—— 这会输出字面的 `` 标签,不是你想要的纯文本
- 用
<xsl:text> </xsl:text>显式插入换行符(是 Unicode 换行符)
控制空白:避免意外空格和换行
XSLT 默认会保留模板中写的空白(包括换行和缩进),这在 text 模式下极易导致多余空行:
- 在
<xsl:stylesheet>上加属性:exclude-result-prefixes="#all"(可选,但整洁) - 用
<xsl:strip-space elements="*"/>去掉源 XML 中无关空白(对输入有效) - 更关键的是:把模板内容写成一行,或用
<xsl:text>包裹所有显式空白,例如:<xsl:template match="/"><xsl:text>Name:</xsl:text><xsl:value-of select="person/name"/><xsl:text> Age:</xsl:text><xsl:value-of select="person/age"/></xsl:template>
常见陷阱提醒
这些小细节常导致输出“看起来像 XML”或“多出空行”:
- 没关
indent="no"→ 处理器可能自动缩进内容(尤其用 Saxon 或 oXygen 时) - 模板里写了换行却没用
<xsl:text>包裹 → 那个换行会被当作文本节点输出 - 用了
<xsl:copy-of>或未匹配模板 → 可能输出原始 XML 字符(如)而非预期文本 -
编码不一致(如 XSLT 文件存为 UTF-8 BOM,但 output 指定
encoding="ISO-8859-1")→ 出现乱码
基本上就这些。只要 method 设对、空白控住、内容直出,XSLT 生成文本文件很干净利落。







