如何用XSLT生成文本文件 output method="text"

用XSLT生成纯文本需设method="text"并显式声明,配合strip-space、避免模板空白、用xsl:text控格式;示例CSV输出每行严格两列无标签。

用 XSLT 生成纯文本文件,核心是设置 output method="text",并确保模板中只输出文本内容(不产生标签、空格、换行等意外字符)。

正确声明输出方法

在 XSLT 根元素 内,必须显式声明:

注意:
method="text" 关闭 HTML/XML 序列化逻辑,避免转义、自动闭合、DOCTYPE 等行为;
• 显式指定 encoding(如 UTF-8)可防止中文乱码;
• 不要同时设置 indent="yes"(对 text 无效,且部分处理器会警告)。

控制输出内容:只写文本,不写标签

XSLT 默认会把源 XML 中的文本节点、空白、标签结构都参与处理。生成纯文本时需主动抑制无关内容:

  • 忽略源文档所有元素间的空白文本节点;
  • 避免在模板中写未包裹的换行或缩进(例如模板内直接回车会输出换行符);
  • 精确控制换行、制表符、空格等格式字符;
  • 慎用 —— 若未定义匹配模板,可能输出意外文本(如默认规则会输出所有子文本)。

典型文本输出示例:生成 CSV 行

假设输入 XML 是一组人员信息,想导出为逗号分隔的纯文本:


  
  

  

说明:
安全插入换行( 是 LF 字符),避免因模板换行引入不可控空白;
• 没有 ,所以不会透传源文档中多余的空白;
• 输出结果是严格两列、每行一条记录的纯文本,无 XML 声明、无标签、无额外空行。

调试技巧:检查实际输出字节

文本输出容易被隐藏字符干扰(如 BOM、CR/LF 差异、零宽空格)。建议:

  • 用十六进制编辑器(如 HxD、xxd)查看生成文件的真实字节;
  • 在命令行用 file -i output.txthexdump -C output.txt | head 验证编码和开头字符;
  • 若出现 BOM,可在 中加 omit-xml-declaration="yes"(虽对 text 无 XML 声明,但某些处理器仍可能加 BOM,此时可尝试设 byte-order-mark="no",XSLT 2.0+ 支持)。