在使用XSLT处理XML数据时,默认转换结果往往是XML或HTML文档。如果希望输出一份纯文本文件,比如日志、CSV或者配置文件,就必须在样式表中明确改变输出方式。最核心的控制点就是输出声明,它决定了序列化器以什么规则写入结果。

设置输出方法为text
XSLT通过xsl:output来定义结果文档的格式。当method属性取值为text时,处理器不会生成任何XML或HTML标签,所有模板中输出的内容都会原样写成字符流。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 关键:声明输出为纯文本 -->
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="users/user">
<xsl:value-of select="name"/>,<xsl:value-of select="age"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
控制换行与空格
在文本模式下,标签之间的换行容易被忽略。建议使用xsl:text包裹需要保留的换行符或空格,这样可以避免缩进带来的多余空白。
- 用
xsl:text写入换行,确保不同记录分行 - 避免在模板中直接留空行,空白可能被合并
- 特殊字符如制表符可写在
xsl:text内部
使用程序执行转换
下面以Python为例,调用lxml库将XML转换成txt文件:
from lxml import etree
# 读取XML与XSLT
xml_doc = etree.parse('data.xml')
xslt_doc = etree.parse('text_out.xsl')
transform = etree.XSLT(xslt_doc)
# 执行转换并写入文本文件
result = transform(xml_doc)
with open('output.txt', 'wb') as f:
f.write(str(result).encode('utf-8'))
常见注意点
| 问题 | 原因 | 解决办法 |
|---|---|---|
| 输出带多余空行 | 模板缩进产生空白文本节点 | 用xsl:text显式控制 |
| 中文乱码 | 编码声明不一致 | 统一设置UTF-8 |
只要把method设为text,XSLT就变成了一个灵活的文本模板引擎,适合做数据导出。
小结
通过xsl:output method="text"以及合理的xsl:text使用,我们可以用XSLT稳定生成各类文本文件,而不局限于标记语言输出。
XSLT文本输出xsl_output_method修改时间:2026-07-26 23:06:19