为了账号安全,请及时绑定邮箱和手机立即绑定

将 XML 文件解析为 Python 对象..?

将 XML 文件解析为 Python 对象..?

温温酱 2022-08-11 20:16:11
我尝试这样做,但没有得到如何做到这一点是我的xml.file<?xml version="1.0" encoding="utf-8"?><openerp><data>    <record name ="Collection Report" id="view_collection_report_tree" model="cl.wastemanager.collection.report">        <field name="description">Collection Report Tree</field>        <field name="model">ir.ui.view</field>        <field name="arch" type="xml">            <tree string="Collection Analysis">                <field name="hospital_no" type="string"/>                <field name="partner_id" type="integer"/>                <field name="district" type="string"/>                <field name="town" type="string"/>                <field name="date" type="string"/>                <field name="cat1_uom_count" type="integer"/>                <field name="cat1_uom_qty" type="float"/>                <field name="cat2_uom_count" type="integer"/>                <field name="cat2_uom_qty" type="float"/>                <field name="cat3_uom_count" type="integer"/>                <field name="cat3_uom_qty" type="float"/>                <field name="cat4_uom_count" type="integer"/>                <field name="cat4_uom_qty" type="float"/>                <field name="cat5_uom_count" type="integer"/>                <field name="cat5_uom_qty" type="float"/>                <field name="total_uom_count" type="integer"/>                <field name="total_uom_qty" type="float"/>                <field name="plant_id" type="integer"/>                <field name="vehicle_id" type="integer"/>            </tree>        </field>    </record></data></openerp>我想把它读成一个python对象,就像字典列表一样。因为标记是绝对固定的,所以我很想使用正则表达式(我非常擅长使用它们)。但是,我想我会检查是否有人知道如何在这里轻松避免正则表达式。不过,我对SAX或其他解析没有太多经验,但我愿意学习。我期待着看到如何在Python中没有正则表达式的情况下快速完成此操作。感谢您的帮助!
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这是我使用熊猫从自己那里尝试的,我能够正确获得输出。


import pandas as pd

import xml.etree.ElementTree as etree


tree = etree.parse("Filename.xml") #enter your filename what you saved in your system


root = tree.getroot()


columns = ["name", "type"]


datatframe = pd.DataFrame(columns = columns)


for node in root[0][0][2][0]:


    name = node.get("name")


    type = node.get("type")


    datatframe = datatframe.append(pd.Series([name, type], index = columns), ignore_index = True)


print(datatframe)

我的输出:


               name     type

0       hospital_no   string

1        partner_id  integer

2          district   string

3              town   string

4              date   string

5    cat1_uom_count  integer

6      cat1_uom_qty    float

7    cat2_uom_count  integer

8      cat2_uom_qty    float

9    cat3_uom_count  integer

10     cat3_uom_qty    float

11   cat4_uom_count  integer

12     cat4_uom_qty    float

13   cat5_uom_count  integer

14     cat5_uom_qty    float

15  total_uom_count  integer

16    total_uom_qty    float

17         plant_id  integer

18       vehicle_id  integer


查看完整回答
反对 回复 2022-08-11
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

您并没有真正说明要实现的目标,但下面是从xml中提取数据的示例,在本例中,我从树元素内的字段中提取字段名称和类型。


import xmltodict

with open("test.xml") as xml_file:

    my_xml = xmltodict.parse(xml_file.read())

    for field in my_xml["openerp"]["data"]["record"]["field"][2]["tree"]["field"]:

        print(f"{field['@name']}: {field['@type']}")

输出


hospital_no: string

partner_id: integer

district: string

town: string

date: string

cat1_uom_count: integer

cat1_uom_qty: float

cat2_uom_count: integer

cat2_uom_qty: float

cat3_uom_count: integer

cat3_uom_qty: float

cat4_uom_count: integer

cat4_uom_qty: float

cat5_uom_count: integer

cat5_uom_qty: float

total_uom_count: integer

total_uom_qty: float

plant_id: integer

vehicle_id: integer


查看完整回答
反对 回复 2022-08-11
  • 2 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号