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

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

















