You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:20:14