如何在Logic Apps中基于子节点Code值为XML节点添加Description字段?
在Logic Apps中基于子子节点值更新XML节点的解决方案
针对你遇到的问题,这里提供两种可行的实现方式:
方法一:XML转JSON + 数组处理 + JSON转XML
这种方式借助Logic Apps的数组操作能力,绕开XML直接处理的限制:
- XML转JSON:使用
Xml to Json动作将原XML转换为JSON格式,便于后续数组操作。 - 筛选目标节点:添加
Filter Array动作,输入转换后JSON中的JournalCollection.Journal数组,筛选条件设为@equals(item()?['ChangeCode']?['Code'], 'b1'),确认能定位到目标Journal项。 - 初始化数组变量:创建一个类型为数组的变量,用于存储处理后的所有Journal节点数据。
- 遍历并处理每个节点:
- 添加
Apply to each循环,遍历原JSON的JournalCollection.Journal数组。 - 在循环内添加
Condition判断:@equals(item()?['ChangeCode']?['Code'], 'b1')。- 满足条件时:构造新对象,保留当前节点的所有原有属性,再添加
Description字段(例如"New Description",如果原节点已有Description可直接复用)。 - 不满足条件时:直接保留当前节点的原有数据。
- 满足条件时:构造新对象,保留当前节点的所有原有属性,再添加
- 将处理后的节点添加到之前初始化的数组变量中。
- 添加
- JSON转XML:构造包含根节点的JSON结构(示例:
{"JournalCollection": {"Journal": 你的数组变量名}}),用Json to Xml动作转换回XML格式。
方法二:使用XSLT配合Transform XML组件
通过自定义XSLT模板,直接在XML层面完成条件判断和节点添加,无需格式转换:
- 编写XSLT模板:创建如下XSLT代码,实现匹配
Code为b1的Journal节点并添加Description字段(如果该字段不存在):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <!-- 处理根节点 --> <xsl:template match="/JournalCollection"> <xsl:copy> <xsl:apply-templates select="Journal"/> </xsl:copy> </xsl:template> <!-- 处理Journal节点 --> <xsl:template match="Journal"> <xsl:copy> <!-- 复制原有所有子节点 --> <xsl:apply-templates select="@*|node()"/> <!-- 当Code为b1且无Description时添加字段 --> <xsl:if test="ChangeCode/Code = 'b1' and not(Description)"> <Description>Your Custom Description</Description> </xsl:if> </xsl:copy> </xsl:template> <!-- 默认模板:复制所有其他节点和属性 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
- 配置Transform XML组件:在Logic Apps中添加
Transform XML动作,输入原XML数据,将上述XSLT代码作为转换模板,执行后即可得到处理后的XML。
两种方式对比:方法一无需掌握XSLT,用Logic Apps基础动作即可实现;方法二更高效,适合复杂XML场景,避免格式转换的额外开销。
内容的提问来源于stack exchange,提问作者vpn
相关产品推荐
相关产品推荐

