Power Automate Desktop中批量修改XML发票INVOICE_TYPE求助
Power Automate Desktop批量处理XML发票数据步骤
问题场景
我在Power Automate Desktop中处理多发票XML文件时遇到批量修改的问题,XML结构如下:
<INVOICE> <HEADER> <INVOICE_ID>1019526</INVOICE_ID> <PROCESS_CODE>00</PROCESS_CODE> <INVOICE_TYPE UNTDID_CODE="381">00</INVOICE_TYPE> <METHOD_OF_CHARGE>00</METHOD_OF_CHARGE> <SUBJECT>Creditnote</SUBJECT> <CREDIT_INVOICE_NUMBER>1013996</CREDIT_INVOICE_NUMBER> </HEADER> <SUMMARY> <ROWS_TOTAL> <AMOUNT SIGN="-" VAT="EXCLUDED">8123.25</AMOUNT> </ROWS_TOTAL> </SUMMARY> </INVOICE> <INVOICE> <HEADER> <INVOICE_ID>1029526</INVOICE_ID> <PROCESS_CODE>00</PROCESS_CODE> <INVOICE_TYPE UNTDID_CODE="381">00</INVOICE_TYPE> <METHOD_OF_CHARGE>00</METHOD_OF_CHARGE> <SUBJECT>Invoice</SUBJECT> <CREDIT_INVOICE_NUMBER>1023996</CREDIT_INVOICE_NUMBER> </HEADER> <SUMMARY> <ROWS_TOTAL> <AMOUNT SIGN="+" VAT="EXCLUDED">764.25</AMOUNT> </ROWS_TOTAL> </SUMMARY> </INVOICE> <INVOICE> <HEADER> <INVOICE_ID>1119526</INVOICE_ID> <PROCESS_CODE>00</PROCESS_CODE> <INVOICE_TYPE UNTDID_CODE="381">00</INVOICE_TYPE> <METHOD_OF_CHARGE>00</METHOD_OF_CHARGE> <SUBJECT>Creditnote</SUBJECT> <CREDIT_INVOICE_NUMBER>1013956</CREDIT_INVOICE_NUMBER> </HEADER> <SUMMARY> <ROWS_TOTAL> <AMOUNT SIGN="-" VAT="EXCLUDED">722.25</AMOUNT> </ROWS_TOTAL> </SUMMARY> </INVOICE>
需求是:批量识别所有SUBJECT为"Creditnote"且AMOUNT的SIGN属性为"-"的发票,将这些发票的INVOICE_TYPE修改为"04",最后另存为新文件。之前只能处理首个发票,现在需要批量实现。
具体实现步骤
1. 加载XML文件
- 使用
Load XML document from file动作,选择目标XML文件,将加载后的文档保存到变量(例如xmlDocument)。 - 注意:如果原XML没有根节点(如示例中的结构),需要先通过
Replace text动作给XML包裹根节点,比如:
否则加载XML会报错,处理完成后保存时可以再去掉根节点(如果需要)。<INVOICES>原XML内容</INVOICES>
2. 筛选符合条件的发票节点
- 添加
Execute XPath expression动作:- XML文档选择
xmlDocument - XPath表达式填写:
//INVOICE[HEADER/SUBJECT/text()='Creditnote' and SUMMARY/ROWS_TOTAL/AMOUNT/@SIGN='-'] - 将结果保存到变量
matchingInvoices(这是一个符合条件的INVOICE节点集合)。
- XML文档选择
3. 批量修改节点值
- 添加
Loop动作,选择For each模式,循环对象选择matchingInvoices。 - 在循环内部添加
Set XML node value动作:- XML文档:
xmlDocument - XPath表达式填写(相对路径,基于当前循环的INVOICE节点):
./HEADER/INVOICE_TYPE - 新值填写
04。 - 这个动作只会修改
INVOICE_TYPE的文本内容,不会删除其UNTDID_CODE属性,符合需求。
- XML文档:
4. 保存修改后的XML
- 使用
Save XML document to file动作,选择xmlDocument,指定新的文件路径和名称,完成保存。 - 如果之前添加了根节点,需要保存后再通过
Replace text动作去掉<INVOICES>和</INVOICES>标签,恢复原结构。
内容的提问来源于stack exchange,提问作者USSSR
相关产品推荐
相关产品推荐

