Power Automate中从无父节点多根XML提取姓名的XPATH问题
解决Power Automate中无父节点XML的Firstname/Lastname提取问题
问题背景
从SaaS API拉取的XML无顶层父节点,包含多个<Request>元素,需提取每个元素下的Firstname和Lastname同步到其他应用。尝试XPATH过滤器/*/Firstname|/*/Lastname、Firstname|Lastname均因XML格式不合法报错。
核心原因
Power Automate的XML处理组件要求输入合法XML文档,即必须包含且仅包含一个顶层根节点。当前XML是多个<Request>节点并列,不符合规范,导致XPATH解析失败。
解决方案步骤
1. 给XML添加根节点
用Power Automate的Compose动作,将原始XML包裹在自定义根节点(比如<Requests>)中,把非合法XML转为合法格式:
<Requests>@{outputs('API拉取XML的动作名称')}</Requests>
替换
API拉取XML的动作名称为你实际调用API的动作名称。
2. 提取每个Request下的字段
有两种常用方式提取Firstname和Lastname:
方式一:XPATH遍历Request节点
- 先获取所有
<Request>节点:xpath(outputs('添加根节点的Compose'), '//Request') - 对每个节点(用Apply to each循环)提取字段:
- Firstname:
xpath(item(), 'string(./Firstname)') - Lastname:
xpath(item(), 'string(./Lastname)')
- Firstname:
方式二:用Select动作直接映射
- 数据源选择添加根节点后的Compose输出
- 在映射面板中设置:
Firstname: xpath(item(), 'string(./Firstname)') Lastname: xpath(item(), 'string(./Lastname)')
修正后的合法XML示例
<Requests> <Request ID="19131795" Status="Approved"> <TimeOffDate>2023-02-14</TimeOffDate> <TimeOffDayOfWeek>Tuesday</TimeOffDayOfWeek> <TimeStart></TimeStart> <TimeEnd></TimeEnd> <TimeOffHours>8.000</TimeOffHours> <TimeOffTypeName>Maternity Leave</TimeOffTypeName> <EmployeeID>646028926148N</EmployeeID> <LoginID>Marie</LoginID> <Firstname>Marie-Eve</Firstname> <Lastname>B</Lastname> <UserCategory>Software Development</UserCategory> <SubmittedDate>2022-03-11</SubmittedDate> <Deducted>Yes</Deducted> <Comment>time-off request created by administrator</Comment> </Request> <Request ID="21301056" Status="Approved"> <TimeOffDate>2023-02-14</TimeOffDate> <TimeOffDayOfWeek>Tuesday</TimeOffDayOfWeek> <TimeStart>2023-02-14T13:00:00</TimeStart> <TimeEnd>2023-02-14T17:00:00</TimeEnd> <TimeOffHours>4.000</TimeOffHours> <TimeOffTypeName>Paid Time Off - Salary</TimeOffTypeName> <EmployeeID>FRM992097</EmployeeID> <LoginID>Robert</LoginID> <Firstname>Bobby</Firstname> <Lastname>D</Lastname> <UserCategory>Information Technology</UserCategory> <SubmittedDate>2023-01-06</SubmittedDate> <Deducted>Yes</Deducted> <Comment></Comment> </Request> <Request ID="21324804" Status="Approved"> <TimeOffDate>2023-02-14</TimeOffDate> <TimeOffDayOfWeek>Tuesday</TimeOffDayOfWeek> <TimeStart></TimeStart> <TimeEnd></TimeEnd> <TimeOffHours>8.000</TimeOffHours> <TimeOffTypeName>NL Parental Leave 1</TimeOffTypeName> <EmployeeID></EmployeeID> <LoginID>Kamila</LoginID> <Firstname>Kamila</Firstname> <Lastname>K</Lastname> <UserCategory>NL Customer Service</UserCategory> <SubmittedDate>2023-01-09</SubmittedDate> <Deducted>Yes</Deducted> <Comment>time-off request created by administrator</Comment> </Request> </Requests>
内容的提问来源于stack exchange,提问作者Chris Wooten
相关产品推荐
相关产品推荐

