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

基于同级节点值检索节点的XSLT技术问题求助

解决XSLT提取Active状态JobProfile对应ID的问题

输入XML

<?xml version="1.0"encoding="UTF-8"?>
<Root>
    <Record>
        <JobProfile>
            <Status>
                <Code>Pending</Code>
            </Status>
            <ID>
                <Code>007</Code>
            </ID>
        </JobProfile>
        <JobProfile>
            <Status>
                <Code>Active</Code>
            </Status>
            <ID>
                <Code>003</Code>
            </ID>
        </JobProfile>
        <JobProfile>
            <Status>
                <Code>Terminated</Code>
            </Status>
            <ID>
                <Code>004</Code>
            </ID>
        </JobProfile>
    </Record>
</Root>

期望输出XML

<Root>
    <Record>
        <ID>003</ID>
    </Record>
</Root>

原XSLT代码问题

你提供的XSLT有两处关键错误:

  1. 路径选择错误:在匹配/Root/Record的模板中,当前上下文已经是Record节点,xsl:for-each里的Record/JobProfile路径不存在,应该直接写JobProfile。
  2. 节点结构错误:原模板直接将Record节点替换为ID,但期望输出需要保留Root和Record层级,在Record内部生成ID节点。

修正后的XSLT代码

<xsl:stylesheet version="2.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>

    <!-- 匹配Record节点,自定义处理逻辑 -->
    <xsl:template match="/Root/Record">
        <!-- 保留Record节点 -->
        <Record>
            <!-- 筛选出Status/Code为Active的JobProfile -->
            <xsl:for-each select="JobProfile[Status/Code='Active']">
                <!-- 生成ID节点并填入对应Code值 -->
                <ID>
                    <xsl:value-of select="ID/Code"/>
                </ID>
            </xsl:for-each>
        </Record>
    </xsl:template>

    <!-- 忽略所有JobProfile节点,避免被身份模板复制 -->
    <xsl:template match="JobProfile"/>
</xsl:stylesheet>

代码说明

  1. 身份转换模板:保留默认的节点复制逻辑,确保Root等需要保留的节点正常输出。
  2. Record节点处理:
    • 先复制Record节点,维持层级结构。
    • 直接筛选JobProfile[Status/Code='Active'],替代原有的for-each+if组合,更简洁高效。
    • 生成目标ID节点并提取对应Code值。
  3. JobProfile节点忽略:添加专门的模板匹配JobProfile,不做任何处理,避免原节点被身份模板复制到输出中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:52:43