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

寻求XML转文本的XSLT转换方案:源与目标行合并展示

XSLT模板:将源端与目标端XML记录合并为同行文本

没问题,我帮你搞定这个需求——把XML里源端(row host="src")和目标端(row host="targ")的对应记录配对,放在同一行输出成简洁的纯文本,还能适配动态生成的<col>节点。

先给你一个示例XML结构(方便对应理解模板):

<?xml version="1.0" encoding="UTF-8"?>
<report>
  <row host="src">
    <col name="ID">101</col>
    <col name="Name">Alice</col>
    <col name="Email">alice@example.com</col>
  </row>
  <row host="targ">
    <col name="ID">101</col>
    <col name="Name">Alice</col>
    <col name="Email">alice_new@example.com</col>
  </row>
  <row host="src">
    <col name="ID">102</col>
    <col name="Name">Bob</col>
  </row>
  <row host="targ">
    <col name="ID">102</col>
    <col name="Name">Robert</col>
  </row>
</report>

接下来是核心的XSLT模板:

<?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" indent="no"/>

  <!-- 匹配根节点,遍历所有源端记录 -->
  <xsl:template match="/">
    <!-- 可选表头,不需要可直接删除 -->
    <xsl:text>源端记录 | 目标端记录&#10;</xsl:text>
    <xsl:text>------------------------&#10;</xsl:text>

    <xsl:for-each select="//row[@host='src']">
      <!-- 获取配对标识(这里用第一个col的值,可按需修改为特定列如col[@name='ID']) -->
      <xsl:variable name="srcKey" select="col[1]"/>
      <!-- 找到对应的目标端记录 -->
      <xsl:variable name="matchingTarg" select="//row[@host='targ'][col[1]=$srcKey]"/>

      <!-- 拼接源端所有动态col的内容 -->
      <xsl:variable name="srcContent">
        <xsl:for-each select="col">
          <xsl:value-of select="concat(@name, ': ', ., '; ')"/>
        </xsl:for-each>
      </xsl:variable>

      <!-- 拼接目标端所有动态col的内容 -->
      <xsl:variable name="targContent">
        <xsl:for-each select="$matchingTarg/col">
          <xsl:value-of select="concat(@name, ': ', ., '; ')"/>
        </xsl:for-each>
      </xsl:variable>

      <!-- 输出同行的源端+目标端内容,分隔符可自定义 -->
      <xsl:value-of select="concat($srcContent, ' | ', $targContent, '&#10;')"/>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

关键细节说明

  • 配对逻辑:默认用每条记录的第一个<col>值作为配对键(比如示例里的ID),如果你的配对依据是特定列,直接把$srcKey改成col[@name='你的列名']即可,更精准。
  • 动态<col>适配:通过for-each自动遍历所有<col>节点,不管列数多少、列名是什么,都能自动拼接成列名: 值; 的格式。
  • 格式自定义:输出用|分隔源端和目标端内容,你可以换成制表符、逗号等;如果不需要表头,直接删掉输出表头的两行代码就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:37