当每个元素中有多个条目时,如何使用python ElementTree读取XML

2024-09-30 01:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑以包含一些额外信息

我用Python中的ElementTree解析了一些XML格式的数据。在主数据的每一行中都有一个名为volume的标记,然后是一组数据,我将其放入一个数组(稍后将其另存为数据帧)。我遇到的问题是,我需要知道我调用字段名的条目的名称(即,[messagemessagetimestampsettlementdatesettlementperiod,等等…),以便能够调用数据

我想使用一些代码来告诉我字段名列表是什么,而不是手动输入它们。我可能在这里有我的XML术语错误,但数据看起来像附加的图像

XML作为文本:

<response xmlns="http://www.netareports.com/backend/realtime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.netareports.com/backend/realtime http://www.netareports.com/backend/realtime.xsd" status="1" timestamp="2021-03-19T16:37:23">
<periodacceptedvolume message="BMRS.DISPTAV" messagetimestamp="2020-11-30T01:52:32" settlementdate="2020-11-30T00:00:00" settlementperiod="3" bmunitid="E_GYAR-1" bidofferpairnumber="-1" offervolume="0" bidvolume="-44.75" taggedoffervolume="0" repricedoffervolume="0" originallypricedoffervolume="0" taggedbidvolume="-44.531" repricedbidvolume="0" originallypricedbidbolume="-43.69"/>
<periodacceptedvolume message="BMRS.DISPTAV" messagetimestamp="2020-11-30T01:52:32" settlementdate="2020-11-30T00:00:00" settlementperiod="3" bmunitid="T_DAMC-1" bidofferpairnumber="1" offervolume="240" bidvolume="0" taggedoffervolume="240" repricedoffervolume="0" originallypricedoffervolume="0" taggedbidvolume="0" repricedbidvolume="0" originallypricedbidbolume="0"/>
<periodacceptedvolume message="BMRS.DISPTAV" messagetimestamp="2020-11-30T01:52:32" settlementdate="2020-11-30T00:00:00" settlementperiod="3" bmunitid="T_DIDCB6" bidofferpairnumber="1" offervolume="220" bidvolume="0" taggedoffervolume="220" repricedoffervolume="0" originallypricedoffervolume="0" taggedbidvolume="0" repricedbidvolume="0" originallypricedbidbolume="0"/>
<periodacceptedvolume message="BMRS.DISPTAV" messagetimestamp="2020-11-30T01:52:32" settlementdate="2020-11-30T00:00:00" settlementperiod="3" bmunitid="T_DINO-6" bidofferpairnumber="-1" offervolume="0" bidvolume="-2.592" taggedoffervolume="0" repricedoffervolume="0" originallypricedoffervolume="0" taggedbidvolume="-2.592" repricedbidvolume="0" originallypricedbidbolume="0"/>
<periodacceptedvolume message="BMRS.DISPTAV" messagetimestamp="2020-11-30T01:52:32" settlementdate="2020-11-30T00:00:00" settlementperiod="3" bmunitid="T_MEDP-1" bidofferpairnumber="1" offervolume="170" bidvolume="0" taggedoffervolume="170" repricedoffervolume="0" originallypricedoffervolume="0" taggedbidvolume="0" repricedbidvolume="0" originallypricedbidbolume="0"/>

我用来阅读的代码是:

    import xml.etree.ElementTree as ET
    import urllib.request

    url = #not included as it includes a password but the XML data is copied from the url
    download = urllib.request.urlopen(url).read()
    tree = ET.fromstring(download)

    fieldsV=['message','messagetimestamp','settlementdate','settlementperiod','bmunitid','bidofferpairnumber','offervolume','bidvolume','taggedoffervolume','repricedoffervolume','originallypricedoffervolume','taggedbidvolume','repricedbidvolume','originallypricedbidbolume']
    data = []
    for child in tree:
        data.append([(child.get(name) or '') for name in fields])

这很好,但是fields是一个我手动输入的列表,我想使用代码生成该列表,以便将其应用于其他类似的XML文件。任何帮助都将不胜感激


Tags: 数据messagesettlementdatebidvolumesettlementperiodrepricedoffervolumerepricedbidvolumeoriginallypricedbidbolume

热门问题