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

无法按条件提取XML指定节点及对应账户,请求修正Python代码

提取XML中RNAME为Applicable的节点及对应账户信息

需求说明

需要从XML中提取RNAME值为Applicable的<Report>节点,以及该节点下对应的账户信息,最终整理成指定格式的DataFrame。

XML示例

<Reports>
   <Report>
      <ID>A1234</ID>
      <RNAME>Not Applicable</RNAME>
      <Accounts>
         <Account>
            <AID>12345</AID>
            <A2>TEST1</A2>
         </Account>
      </Accounts>
   </Report>
   <Report>
      <ID>A12345</ID>
      <RNAME>Applicable</RNAME>
      <Accounts>
         <Account>
            <AID>123456789</AID>
            <A2>TEST2</A2>
         </Account>
      </Accounts>
   </Report>
</Reports>

预期DataFrame输出

IDAIDA2
A12345123456789TEST2

现有代码问题

当前代码能正确识别目标<Report>节点并输出对应ID,但会全局遍历所有账户节点,导致输出全部账户数据,无法关联到目标节点下的账户:

for x in ET.fromstring(sample.xml).findall(".//Report"):
    RNAME = x.find("RNAME").text
    if RNAME != "Not Applicable":
       ID = x.find("ID").text 
       print(ID) # 输出A12345
    for y in ET.fromstring(content).findall('.//Report/Accounts/Account'):
        AID = y.find("AID").text
        A2 = y.find("A2").text
        print(AID, A2) # 输出所有账户:12345 TEST1 和 123456789 TEST2

修正后的代码

import xml.etree.ElementTree as ET
import pandas as pd

# 若XML来自文件,可替换为root = ET.parse("你的文件路径.xml").getroot()
root = ET.fromstring(sample_xml)
result_data = []

for report_node in root.findall(".//Report"):
    rname_text = report_node.find("RNAME").text
    if rname_text == "Applicable":
        current_id = report_node.find("ID").text
        # 仅在当前匹配的Report节点下查找账户,而非全局查找
        account_nodes = report_node.findall(".//Accounts/Account")
        for account in account_nodes:
            aid = account.find("AID").text
            a2 = account.find("A2").text
            result_data.append({"ID": current_id, "AID": aid, "A2": a2})

# 转换为目标格式的DataFrame
df = pd.DataFrame(result_data)
print(df)

代码说明

  1. 节点关联查找:不再全局遍历所有<Account>节点,而是在匹配到RNAME=Applicable的<Report>节点内部进行账户查找,确保账户数据和所属Report节点一一对应。
  2. 数据整理:通过列表收集符合条件的字典数据,最后转换为DataFrame,直接得到预期格式的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:49:06