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

XSLT实现将meltNum嵌入同层级chem节点的问题求助

问题解决:将<meltNum>嵌入同级每个<chem>节点

错误原因分析

你当前的代码存在两个核心问题:

  • 使用//elemCode会选取整个文档中所有<elemCode>节点,导致所有元素代码被重复输出
  • 错误使用key分组逻辑,你的场景不需要分组,仅需按层级遍历处理节点

正确XSLT实现

采用XSLT标准的身份模板+特殊节点处理方案,既保证原有结构完整性,又精准实现需求:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 身份模板:默认复制所有未被特殊匹配的节点/属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 移除原meltNum节点 -->
    <xsl:template match="meltNum"/>

    <!-- 给每个chem节点插入对应meltNum -->
    <xsl:template match="chem">
        <xsl:copy>
            <!-- 插入当前meltChem下的meltNum值 -->
            <meltNum>
                <xsl:value-of select="../meltNum"/>
            </meltNum>
            <!-- 保留chem原有的子节点 -->
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

代码说明

  1. 身份模板:负责原样复制XML中未被特殊模板匹配的节点,保证整体结构不被破坏
  2. 移除meltNum模板:匹配所有原<meltNum>节点,不输出任何内容,实现原节点的移除
  3. chem节点处理模板:
    • 复制当前<chem>节点
    • 通过../meltNum获取其父节点<meltChem>下的<meltNum>值,插入到<chem>内部最前方
    • 继续处理<chem>原有的<elemCode>和<value>子节点

将该XSLT应用到你的输入XML,即可生成完全符合期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:46:19