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

如何使用XSLT的for-each元素遍历嵌套对象实现XML格式转换

解决XSLT中遍历嵌套Parent和Service节点的问题

没问题,我来帮你搞定这个嵌套遍历的问题。先梳理下你的XML结构:根节点SecrviceRsp下包含一个Application,Application里有多个Parent节点,每个Parent又对应自己的Service节点。用xsl:for-each完全能处理这种嵌套结构,核心是写对节点的相对路径。

我先给你一个完整的可复用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="xml" indent="yes"/>

    <!-- 匹配根节点开始转换 -->
    <xsl:template match="/SecrviceRsp">
        <TransformedResponse>
            <!-- 第一层遍历:遍历Application下的所有Parent节点 -->
            <xsl:for-each select="Application/Parent">
                <ParentRecord>
                    <!-- 获取当前Parent的名称 -->
                    <ParentName>
                        <xsl:value-of select="ParentName"/>
                    </ParentName>
                    <!-- 第二层嵌套遍历:遍历当前Parent下的所有Service节点 -->
                    <xsl:for-each select="Service">
                        <ServiceRecord>
                            <ServiceName>
                                <xsl:value-of select="ServiceName"/>
                            </ServiceName>
                        </ServiceRecord>
                    </xsl:for-each>
                </ParentRecord>
            </xsl:for-each>
        </TransformedResponse>
    </xsl:template>
</xsl:stylesheet>

核心逻辑解释:

  • 第一层for-each:select="Application/Parent" 是从根节点出发的绝对路径,会选中Application下的所有Parent节点,逐个进行处理。
  • 第二层嵌套for-each:select="Service" 是相对路径,意思是“当前正在遍历的Parent节点下的所有Service节点”,这样就能精准关联每个父节点对应的服务。
  • 即使一个Parent下有多个Service节点,这个写法也能自动遍历所有服务,不会遗漏。

测试效果示例

用你提供的XML输入(补全了部分内容):

<SecrviceRsp>
    <Application>
        <ApplicationName>Application-1</ApplicationName>
        <Parent>
            <ParentName>Parent-1</ParentName>
            <Service>
                <ServiceName>Service-1</ServiceName>
            </Service>
        </Parent>
        <Parent>
            <ParentName>Parent-2</ParentName>
            <Service>
                <ServiceName>Service-2</ServiceName>
            </Service>
            <Service>
                <ServiceName>Service-3</ServiceName>
            </Service>
        </Parent>
    </Application>
</SecrviceRsp>

转换后的输出会是:

<?xml version="1.0" encoding="UTF-8"?>
<TransformedResponse>
    <ParentRecord>
        <ParentName>Parent-1</ParentName>
        <ServiceRecord>
            <ServiceName>Service-1</ServiceName>
        </ServiceRecord>
    </ParentRecord>
    <ParentRecord>
        <ParentName>Parent-2</ParentName>
        <ServiceRecord>
            <ServiceName>Service-2</ServiceName>
        </ServiceRecord>
        <ServiceRecord>
            <ServiceName>Service-3</ServiceName>
        </ServiceRecord>
    </ParentRecord>
</TransformedResponse>

如果需要调整输出的节点名称或添加其他字段,直接修改TransformedResponse内部的结构即可,核心的嵌套遍历逻辑是通用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:30:16