Logic Apps解码X12后转换XML遇InvalidXml错误的解决方法
解决Logic App中Transform XML的InvalidXml错误
首先,咱们先定位问题根源:你遇到的InvalidXml-The provided content must be of XML content type错误,说明传给Transform XML组件的内容要么不是合法XML,要么组件识别不到它是XML格式。结合你的配置,大概率是Decode X12后的输出字段选择不对,或者base64ToString转换后的内容不符合XML要求。
下面是一步步的排查和解决方法:
1. 确认Decode X12 Message的输出结构
X12解码组件的输出不是简单的Payload字段,它会把解码后的XML放在特定的字段里。你需要先确认这个结构:
- 在Decode X12 Message组件之后、For Each组件之前,添加一个Compose组件,输入选择
body('Decode_X12_Message')(也就是解码组件的完整输出)。 - 触发流运行一次,查看Compose组件的运行结果。通常你会看到类似这样的结构:
这里的{ "Messages": [ { "ParsedXml": "<YourDecodedXmlContentHere>", "RawData": "base64EncodedOriginalData", ...其他字段 } ] }ParsedXml就是解码后直接生成的XML内容,这才是你应该传给Transform XML的正确输入。
2. 调整For Each和Transform XML的配置
- For Each的输入:把原来的
badmessage改成@{body('Decode_X12_Message')?['Messages']},这样循环的是解码后的每一条消息。 - Transform XML的输入:替换掉原来的
@{base64ToString(item()?['Payload'])},改成@{item()?['ParsedXml']}。这样直接使用解码后生成的合法XML,不需要额外转换。
3. 特殊情况处理:如果必须使用Payload字段
如果你的场景确实需要用Payload字段的内容,那需要做两步验证:
- 先确认
base64ToString(item()?['Payload'])转换后的内容是合法XML:可以在Transform XML之前加一个Compose组件,输入这个表达式,运行后查看内容是否有XML声明、标签是否闭合等。 - 如果转换后的内容是XML,但组件还是报错,那需要手动设置Content-Type:在Transform XML组件的输入设置里,添加一个Header,Key为
Content-Type,Value为application/xml。这样组件就能正确识别输入内容的类型。
4. 验证结果
调整配置后,重新触发流运行,检查Transform XML组件是否能正常处理,Response是否返回转换后的XML结果。
内容的提问来源于stack exchange,提问作者priya
相关产品推荐
相关产品推荐

