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

如何在XSLT中使用for-each对两个列表的同ID节点配对

按ID配对XML中list/desc与rec/val的解决方案

首先明确你的需求:将<list>下每个<desc>的name属性,和<rec>下同id的<val>文本内容一一对应起来。下面给你两种实用的实现方式:

方法1:使用XSLT转换(纯XML原生处理)

XSLT是XML结构转换的标准工具,下面的样式表可以直接输出结构化的配对结果:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <!-- 匹配根节点开始处理 -->
  <xsl:template match="/xxx">
    <paired-data>
      <!-- 遍历所有list下的desc节点 -->
      <xsl:for-each select="yyy/list/desc">
        <pair id="{@id}">
          <name><xsl:value-of select="@name"/></name>
          <!-- 通过id匹配对应的rec/val节点 -->
          <value><xsl:value-of select="../../../yyy/rec/val[@id = current()/@id]"/></value>
        </pair>
      </xsl:for-each>
    </paired-data>
  </xsl:template>
</xsl:stylesheet>

将该XSLT与你的原始XML配合处理后,会得到清晰的配对结果:

<?xml version="1.0" encoding="UTF-8"?>
<paired-data>
  <pair id="1">
    <name>Name1</name>
    <value>Value1</value>
  </pair>
  <pair id="2">
    <name>Name2</name>
    <value/>
  </pair>
  <pair id="3">
    <name>Name3</name>
    <value>IValue3</value>
  </pair>
</paired-data>

方法2:使用Python脚本(编程式处理)

如果你更习惯用代码灵活处理,可以用Python内置的xml.etree.ElementTree模块实现:

import xml.etree.ElementTree as ET

# 解析XML(可替换为你的文件路径或直接传入XML字符串)
tree = ET.parse('your_xml_file.xml')
root = tree.getroot()

# 先把rec下的val按id存入字典,方便快速查找
val_dict = {}
for val_node in root.find('.//rec').findall('val'):
    val_id = val_node.get('id')
    # 处理空值情况,避免None
    val_dict[val_id] = val_node.text.strip() if val_node.text else ''

# 遍历desc节点完成配对
paired_list = []
for desc_node in root.find('.//list').findall('desc'):
    desc_id = desc_node.get('id')
    paired_list.append({
        'id': desc_id,
        'name': desc_node.get('name'),
        'value': val_dict.get(desc_id, '')
    })

# 打印或使用配对结果
for item in paired_list:
    print(f"ID: {item['id']} | Name: {item['name']} | Value: '{item['value']}'")

运行后输出结果:

ID: 1 | Name: Name1 | Value: 'Value1'
ID: 2 | Name: Name2 | Value: ''
ID: 3 | Name: Name3 | Value: 'IValue3'

两种方法都能精准完成按ID配对的需求,你可以根据场景选择适合的方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:10:16