如何用Python生成XSLT文件及实现XSLT模板调用与CSV读取
问题解答
一、主XSLT调用外部的"Dunning"模板
要在主XSLT中调用另一个XSLT文件里的Dunning模板,只需两步操作:
1. 导入外部XSLT文件
在主XSLT的<xsl:stylesheet>根元素内,使用<xsl:import>引入包含目标模板的文件(若无需优先级控制,也可用<xsl:include>,效果类似直接插入代码):
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 替换为你的模板文件路径,同目录直接写文件名即可 --> <xsl:import href="dunning-template.xsl"/> <!-- 主模板示例 --> <xsl:template match="/"> <!-- 调用外部模板 --> <xsl:call-template name="Dunning"> <xsl:with-param name="Image" select="'ABC'"/> <!-- 传入指定的Image参数值 --> </xsl:call-template> </xsl:template> </xsl:stylesheet>
2. 调用目标模板
通过<xsl:call-template name="Dunning">配合<xsl:with-param>传递Image参数即可,参数值可以是字符串、节点或其他合法的XSLT表达式。
二、XSLT读取CSV文件(完全可行)
XSLT 2.0及以上版本支持直接读取文本文件,结合字符串处理功能可轻松解析CSV。以下是具体实现:
假设你的CSV文件status.csv内容为:
ABC,Found MNO,NotFound
1. 基础读取与解析
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <!-- 读取CSV文件内容 --> <xsl:variable name="csv-content" select="unparsed-text('status.csv')"/> <!-- 按行分割内容,兼容Windows(\r\n)和Linux(\n)换行符 --> <xsl:variable name="csv-rows" select="tokenize($csv-content, '\r?\n')"/> <!-- 遍历非空行,拆分列 --> <xsl:for-each select="$csv-rows[normalize-space(.) != '']"> <xsl:variable name="columns" select="tokenize(., ',')"/> <ImageStatus> <Image><xsl:value-of select="$columns[1]"/></Image> <Status><xsl:value-of select="$columns[2]"/></Status> </ImageStatus> </xsl:for-each> </xsl:template> </xsl:stylesheet>
2. 构建查找表(按需查询状态)
如果需要根据Image值快速查询对应状态,可以把CSV解析为一个可查询的节点集:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 预解析CSV为查找表 --> <xsl:variable name="csv-content" select="unparsed-text('status.csv')"/> <xsl:variable name="lookup-table"> <xsl:for-each select="tokenize($csv-content, '\r?\n')[normalize-space(.) != '']"> <xsl:variable name="cols" select="tokenize(., ',')"/> <entry key="{$cols[1]}"><xsl:value-of select="$cols[2]"/></entry> </xsl:for-each> </xsl:variable> <xsl:template match="/"> <!-- 查询ABC对应的状态 --> <xsl:value-of select="$lookup-table/entry[@key='ABC']"/> <!-- 查询MNO对应的状态 --> <xsl:value-of select="$lookup-table/entry[@key='MNO']"/> </xsl:template> </xsl:stylesheet>
关键函数说明
unparsed-text():读取指定路径的文本文件,返回完整字符串内容。tokenize():按指定分隔符分割字符串,支持正则表达式匹配。
内容的提问来源于stack exchange,提问作者Pooja
相关产品推荐
相关产品推荐

