【问题标题】:Read XML with Python tree.getroot使用 Python tree.getroot 读取 XML
【发布时间】:2022-01-20 01:10:35
【问题描述】:

我是 Python 新手,我有这个 XML 和这个代码。这是一张发票,其中“SalesOrderRet”是抬头,“SalesOrderLineRet”是发票的每一行。我遇到的问题是我不知道如何为每个标题单独读取 SalesOrderLineRet。我在这里的代码是从整个 XML 中添加所有“SalesOrderLineRet”,而不仅仅是标题。

def read_xml():
tree = ET.parse('LastResponse.xml')
root = tree.getroot()
form_data = {}
collection = db["tracking"]
for item in root.iter('SalesOrderRet'):
WO = item.find('RefNumber').text
TimeCreatedQB = item.find('TimeCreated').text
Client = item.find('CustomerRef/FullName').text
for items in root.iter('SalesOrderLineRet'):
descrip = getattr(items.find('Desc'), 'text', None)

【问题讨论】:

  • 你可能需要find_allfor-loop
  • 你有错误的缩进 - 所以你的代码对我们没用。你应该从 xml 中添加示例数据,这样我们就可以看到它的样子。

标签: python xml


【解决方案1】:

对于这样的 XML 文件,

<?xml version="1.0"?>
<data>
    <SalesOrderRet>
        <SalesOrderLineRet>
            <RefNumber>1</RefNumber>
            <TimeCreated>0:00</TimeCreated>
            <CustomerRef>
                <FullName>John Doe</FullName>
            </CustomerRef>
        </SalesOrderLineRet>
        <SalesOrderLineRet>
            <RefNumber>2</RefNumber>
            <TimeCreated>0:00</TimeCreated>
            <CustomerRef>
                <FullName>Jack Doe</FullName>
            </CustomerRef>
        </SalesOrderLineRet>
    </SalesOrderRet>
    <SalesOrderRet>
        <SalesOrderLineRet>
            <RefNumber>3</RefNumber>
            <TimeCreated>0:00</TimeCreated>
            <CustomerRef>
                <FullName>Mary Doe</FullName>
            </CustomerRef>
        </SalesOrderLineRet>
        <SalesOrderLineRet>
            <RefNumber>4</RefNumber>
            <TimeCreated>0:00</TimeCreated>
            <CustomerRef>
                <FullName>Susan Doe</FullName>
            </CustomerRef>
        </SalesOrderLineRet>
    </SalesOrderRet>
</data>

这个函数应该单独读取标签和属性。如果还没有,索引每个 &lt;SalesOrderRet&gt; 标记并将各个属性存储在该索引下。

def get_xml(filename):
    tree = ET.parse(filename)
    root = tree.getroot()

    for SalesOrderRet in root:
        print(SalesOrderRet.tag, SalesOrderRet.attrib)

        for SalesOrderLineRet in SalesOrderRet.iter('SalesOrderLineRet'):
            print('  ', SalesOrderLineRet.tag, SalesOrderLineRet.attrib)

            WO = SalesOrderLineRet.find('RefNumber').text
            TimeCreatedQB = SalesOrderLineRet.find('TimeCreated').text
            Client = SalesOrderLineRet.find('CustomerRef/FullName').text
            print('    ', WO, TimeCreatedQB, Client)

此代码基于docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2015-11-04
    • 1970-01-01
    相关资源
    最近更新 更多