如何为XML转TXT的XSLT输出添加指定列头?
为XML转TXT的XSLT 1.0代码添加指定列头
问题描述
现有一段XSLT 1.0代码可将XML转换为TXT文件,但输出无列头。需要为各列添加指定列头:Cost Center、Description、Total Amount、Fiscal Year、Period。
当前输出示例:
12345 General Administration 33709.7 2023 8
期望输出示例:
Cost Center Description Total Amount Fiscal Year Period 12345 General Administration 33709.7 2023 8
修改方案
核心思路是在输出数据行之前,先输出一行格式对齐的列头文本,保证列头与数据列的间隔匹配。
具体修改步骤
- 找到XSLT中负责输出数据行的逻辑(通常是根模板里的循环或匹配数据节点的模板)。
- 在数据行输出代码的最前方,添加列头输出的代码,用固定空格控制各列头的间距,和后续数据列的对齐方式保持一致。
示例代码对比
假设原输出数据的XSLT代码片段如下:
<xsl:template match="/"> <xsl:for-each select="your/data/nodes"> <xsl:value-of select="costCenter"/> <xsl:text> </xsl:text> <xsl:value-of select="description"/> <xsl:text> </xsl:text> <xsl:value-of select="totalAmount"/> <xsl:text> </xsl:text> <xsl:value-of select="fiscalYear"/> <xsl:text> </xsl:text> <xsl:value-of select="period"/> <xsl:text> </xsl:text> <!-- 换行符 --> </xsl:for-each> </xsl:template>
修改后添加列头的代码:
<xsl:template match="/"> <!-- 先输出列头行 --> <xsl:text>Cost Center Description Total Amount Fiscal Year Period </xsl:text> <!-- 再循环输出数据行 --> <xsl:for-each select="your/data/nodes"> <xsl:value-of select="costCenter"/> <xsl:text> </xsl:text> <!-- 调整空格数匹配列头宽度 --> <xsl:value-of select="description"/> <xsl:text> </xsl:text> <xsl:value-of select="totalAmount"/> <xsl:text> </xsl:text> <!-- 调整空格数匹配列头宽度 --> <xsl:value-of select="fiscalYear"/> <xsl:text> </xsl:text> <!-- 调整空格数匹配列头宽度 --> <xsl:value-of select="period"/> <xsl:text> </xsl:text> <!-- 换行符 --> </xsl:for-each> </xsl:template>
关键注意点
- 用
<xsl:text>包裹固定文本和空格,避免XSLT自动缩进破坏格式。 - 根据列头的长度调整数据列之间的空格数,确保列头和数据对齐效果符合预期。
- 使用
表示换行符,保证每行内容单独成行。
内容的提问来源于stack exchange,提问作者Sneha
相关产品推荐
相关产品推荐

