You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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包裹根节点,比如:
    <INVOICES>原XML内容</INVOICES>
    
    否则加载XML会报错,处理完成后保存时可以再去掉根节点(如果需要)。

2. 筛选符合条件的发票节点

  • 添加Execute XPath expression动作:
    • XML文档选择xmlDocument
    • XPath表达式填写:
      //INVOICE[HEADER/SUBJECT/text()='Creditnote' and SUMMARY/ROWS_TOTAL/AMOUNT/@SIGN='-']
      
    • 将结果保存到变量matchingInvoices(这是一个符合条件的INVOICE节点集合)。

3. 批量修改节点值

  • 添加Loop动作,选择For each模式,循环对象选择matchingInvoices。
  • 在循环内部添加Set XML node value动作:
    • XML文档:xmlDocument
    • XPath表达式填写(相对路径,基于当前循环的INVOICE节点):
      ./HEADER/INVOICE_TYPE
      
    • 新值填写04。
    • 这个动作只会修改INVOICE_TYPE的文本内容,不会删除其UNTDID_CODE属性,符合需求。

4. 保存修改后的XML

  • 使用Save XML document to file动作,选择xmlDocument,指定新的文件路径和名称,完成保存。
  • 如果之前添加了根节点,需要保存后再通过Replace text动作去掉<INVOICES>和</INVOICES>标签,恢复原结构。

内容的提问来源于stack exchange,提问作者USSSR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:04:58