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

基于XSLT匹配CSV的IH_NO为HTML的span元素注入对应IH_TITLE

解决方案:XSLT匹配CSV数据填充HTML元素

核心思路

针对10万条量级的CSV数据,核心是通过将CSV转换为可索引的XML节点集,再利用XSLT的key机制实现快速匹配,彻底避免逐个IH_NO的条件判断,保证处理效率。

示例数据

CSV示例(test.csv)

IH_NO,IH_TITLE
IH001,用户管理模块
IH002,订单查询功能
IH003,数据统计面板

原始HTML结构

<html>
  <body>
    <span id="ih-IH001"></span>
    <span id="ih-IH002"></span>
    <span id="ih-IH004"></span>
  </body>
</html>

期望HTML结构

<html>
  <body>
    <span id="ih-IH001">用户管理模块</span>
    <span id="ih-IH002">订单查询功能</span>
    <span id="ih-IH004"></span>
  </body>
</html>

正确XSLT代码(XSLT 2.0+,推荐用Saxon处理器)

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 读取CSV文件并拆分成行 -->
  <xsl:variable name="csv-data" select="unparsed-text('test.csv', 'UTF-8')"/>
  <xsl:variable name="csv-rows" select="tokenize($csv-data, '&#10;')[position() > 1]"/>

  <!-- 创建索引键:以IH_NO为键,映射对应的IH_TITLE -->
  <xsl:key name="ih-title-map" match="row" use="@ih-no"/>

  <!-- 通用复制模板:保留HTML原有结构 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 处理目标span元素 -->
  <xsl:template match="span[starts-with(@id, 'ih-')]">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <!-- 提取id中的IH_NO部分 -->
      <xsl:variable name="target-no" select="substring-after(@id, 'ih-')"/>
      <!-- 通过键快速查找匹配的标题 -->
      <xsl:value-of select="key('ih-title-map', $target-no)/@ih-title"/>
    </xsl:copy>
  </xsl:template>

  <!-- 解析CSV行生成XML节点 -->
  <xsl:variable name="csv-xml">
    <xsl:for-each select="$csv-rows">
      <xsl:if test="normalize-space(.)">
        <xsl:variable name="fields" select="tokenize(., '(?<!"),(?!")')"/>
        <row 
          ih-no="{normalize-space($fields[1])}" 
          ih-title="{normalize-space($fields[2])}"
        />
      </xsl:if>
    </xsl:for-each>
  </xsl:variable>
</xsl:stylesheet>

关键细节说明

  1. CSV解析逻辑

    • 用unparsed-text直接读取CSV文件,指定编码避免乱码
    • 用tokenize按行拆分,跳过表头行
    • 处理带引号的字段:正则(?<!"),(?!")匹配不在引号内的逗号,解决字段含逗号的场景
  2. 索引优化

    • 用xsl:key创建IH_NO到IH_TITLE的映射,查找时是O(1)时间复杂度,完美适配10万条数据的量级
  3. Span匹配逻辑

    • 精准匹配id以ih-开头的span元素
    • 提取id中ih-后的IH_NO内容,通过索引键快速拉取对应标题,无匹配则保持空值

注意事项

  • 必须使用支持XSLT 2.0及以上的处理器(如Saxon-HE),XSLT 1.0不支持unparsed-text和原生tokenize
  • 若CSV存在空行,normalize-space(.)会自动跳过,避免无效节点

内容的提问来源于stack exchange,提问作者ak5555

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:50:46