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

使用XSLT为XML子节点添加Id键以适配MS Access导入关联需求

问题根因
  • 现有XSLT使用固定层级路径../../Id查找上层Id值,而ContactDetails与上层Alice节点的Id间隔为4-7层动态变化,固定层级无法匹配到有效值,因此Id字段为空。
  • 原有方案仅适配了Add节点,其他需要加Id的节点需要单独写模板,维护成本高。
通用解决方案

以下XSLT无需逐个节点编码即可适配动态层级,自动为目标节点插入统一关联Id:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <!-- 身份模板:未匹配的节点/属性原样输出 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 批量匹配需要插入Id的节点,可按需扩展节点列表 -->
    <!-- 如需完全自动适配ContactDetails下所有子节点,可替换为 match="Organization | ContactDetails//*" -->
    <xsl:template match="Organization | Add | PN | EM | Contact">
        <xsl:copy>
            <!-- 向上查找最近的Alice节点的Id,适配任意层级间隔 -->
            <Id><xsl:value-of select="ancestor::Alice[1]/Id"/></Id>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

方案说明

  • 使用XPath的ancestor::Alice[1]轴定位最近的上层Alice节点,不受4-7层动态间隔的影响,可稳定获取到关联Id值。
  • 支持两种匹配模式:
    1. 可控匹配:手动在match属性中添加需要插入Id的节点名,避免给不需要的集合节点(如Adds、PNs)插入冗余Id
    2. 全自动匹配:将match属性替换为Organization | ContactDetails//*,自动为Organization和ContactDetails下所有子节点插入Id,完全无需逐个编码
  • 所有原有节点结构、属性、值均保留,和期望输出结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:03