Zapier作为主流的自动化集成工具,支持通过Webhook接收外部系统推送的数据,当外部系统发送的是XML格式文件时,需要按照特定流程完成解析和后续处理,才能将XML中的数据应用到后续的自动化步骤中。

一、配置Webhook触发步骤
首先需要在Zapier中创建新的Zap,选择Webhooks by Zapier作为触发应用,触发事件选择Catch Hook,此时Zapier会生成一个唯一的Webhook URL,将该URL配置到外部推送XML数据的系统中,确保外部系统发送POST请求到该地址时,携带的Content-Type为application/xml或者text/xml。
配置完成后可以先用测试工具发送一个XML格式的测试请求,验证Zapier是否能正常接收到数据,测试请求示例如下:
# 使用curl发送XML测试请求 curl -X POST https://hooks.zapier.com/hooks/catch/xxxx/xxxx/ -H "Content-Type: application/xml" -d '<user><name>张三</name><age>25</age><email>test@ipipp.com</email></user>'
二、解析XML格式数据
Zapier默认接收到Webhook数据后,如果是XML格式,不会自动解析为结构化字段,需要添加解析步骤。可以选择Code by Zapier作为后续步骤,选择Run Python作为事件,通过Python代码解析XML内容。
解析XML的Python代码示例如下:
import xml.etree.ElementTree as ET
# 获取Webhook传入的原始数据,input_data是Zapier提供的默认输入变量
xml_content = input_data.get("raw_body")
# 解析XML
root = ET.fromstring(xml_content)
# 提取对应字段,返回字典供后续步骤使用
result = {
"user_name": root.find("name").text,
"user_age": root.find("age").text,
"user_email": root.find("email").text
}
return result
如果XML结构比较复杂,包含嵌套节点,可以通过路径的方式提取字段,例如嵌套结构为<data><user_info><name>李四</name></user_info></data>,提取name字段的代码可以调整为:
import xml.etree.ElementTree as ET
xml_content = input_data.get("raw_body")
root = ET.fromstring(xml_content)
# 通过路径提取嵌套字段
user_name = root.find("user_info/name").text
return {"user_name": user_name}
三、字段映射与后续流程配置
完成XML解析后,解析出来的字段会出现在后续步骤的字段选择列表中,此时可以根据需求添加后续的动作步骤,比如将解析出的用户信息写入Google表格、发送通知邮件等。
在映射字段时,直接选择Code by Zapier步骤输出的对应字段即可,例如写入Google表格时,将user_name映射到姓名列,user_age映射到年龄列,user_email映射到邮箱列。
四、常见问题与解决方法
- XML解析报错:检查外部系统发送的XML格式是否规范,是否存在未闭合的标签,或者特殊字符未转义的情况,可以在解析前先打印
xml_content查看原始内容排查问题。 - 接收不到XML数据:确认外部系统发送请求的Content-Type是否正确,同时检查Webhook URL是否配置正确,是否有网络访问限制。
- 嵌套字段提取为空:确认XML的节点路径是否正确,注意区分大小写,XML的标签名是大小写敏感的。
注意:如果XML数据量较大或者结构非常复杂,也可以考虑在外部系统先将XML转换为JSON格式再推送到Zapier,这样可以减少Zapier侧的解析压力,提升流程运行效率。