繁体   English   中英

如何使用 ElementTree 提取动态 xml 文件

[英]how to Extract dynamic xml file using ElementTree

我正在使用 ElementTree 使用标签从 XML 文件中提取数据。

       tree = ET.parse(f)
        root = tree.getroot()
        print(root)
        for i in list(root):
            importedBy = i.find('importedBy').text
            orderCounts = i.find('orderCounts').text
            xml_status = i.find('status').text

            orderdatetime = i.find('orders/order/orderdatetime').text
            admin = i.find('orders/order/admin').text
            salesRep = i.find('orders/order/salesRep').text
            manager = i.find('orders/order/manager').text
            customer = i.find('orders/order/customer').text

            
            orderDetails = i.find('orders/order/orderDetails').text
            saletype = i.find('orders/order/saletype').text
            OfficeName = i.find('orders/order/OfficeName').text

            product = i.find('orders/order/OrderLineItems/OrderLineItem/product').text
            quantity = i.find('orders/order/OrderLineItems/OrderLineItem/quantity').text
            rate = i.find('orders/order/OrderLineItems/OrderLineItem/rate').text
            disc = i.find('orders/order/OrderLineItems/OrderLineItem/discountPercentage').text
            duty = i.find('orders/order/OrderLineItems/OrderLineItem/dutyPercentage').text

但是这种方法的问题在于,有一个长度为 2 的节点orders ,就目前而言,它可能是 3 个orders ,而不是我将如何从中提取数据? OrderLineItems也是如此。

我的 XML 文件:

<importOrders>
    <import>
        <importedBy>6</importedBy>
        <orderCounts>200</orderCounts>
        <status>New</status>
        <orders>
            <order>
                <orderdatetime>2020-11-25</orderdatetime>
                <admin>2</admin>
                <salesRep>3</salesRep>
                <manager>4</manager>
                <customer>1</customer>
                <orderDetails>Order number 1</orderDetails>
                <saletype>Phone</saletype>
                <OfficeName>1</OfficeName>
                <OrderLineItems>
                    <OrderLineItem>
                        <product>1</product>
                        <quantity>11</quantity>
                        <rate>6586</rate>
                        <discountPercentage>4</discountPercentage>
                        <dutyPercentage>2</dutyPercentage>
                    </OrderLineItem>
                    <OrderLineItem>
                        <product>2</product>
                        <quantity>11</quantity>
                        <rate>6586</rate>
                        <discountPercentage>4</discountPercentage>
                        <dutyPercentage>2</dutyPercentage>
                    </OrderLineItem>
                </OrderLineItems>
            </order>
            <order>
                <orderdatetime>2020-11-25</orderdatetime>
                <admin>2</admin>
                <salesRep>3</salesRep>
                <manager>4</manager>
                <customer>1</customer>
                <orderDetails>Order number 1</orderDetails>
                <saletype>Phone</saletype>
                <OfficeName>1</OfficeName>
                <OrderLineItems>
                    <OrderLineItem>
                        <product>1</product>
                        <quantity>11</quantity>
                        <rate>6586</rate>
                        <discountPercentage>4</discountPercentage>
                        <dutyPercentage>2</dutyPercentage>
                    </OrderLineItem>
                    <OrderLineItem>
                        <product>2</product>
                        <quantity>11</quantity>
                        <rate>6586</rate>
                        <discountPercentage>4</discountPercentage>
                        <dutyPercentage>2</dutyPercentage>
                    </OrderLineItem>
                </OrderLineItems>
            </order>
        </orders>
    </import>
</importOrders>

如果您有很多项目,则需要使用 for 循环:

    tree = ET.parse(f)
    root = tree.getroot()
    for import_ in root:
        imported_by = import_.findtext('importedBy')
        order_counts = import_.findtext('orderCounts')
        xml_status = import_.findtext('status')
        for order in import_.findall('orders/order'):
            orderdatetime = order.findtext('orderdatetime')
            admin = order.findtext('admin')
            salesRep = order.findtext('salesRep')
            manager = order.findtext('manager')
            customer = order.findtext('customer')
            order_details = order.findtext('orderDetails')
            saletype = order.findtext('saletype')
            office_name = order.findtext('OfficeName')
            for item in order.findall('OrderLineItems/OrderLineItem'):
                product = item.findtext('product')
                quantity = item.findtext('quantity')
                rate = item.findtext('rate')
                disc = item.findtext('discountPercentage')
                duty = item.findtext('dutyPercentage')
                # do something with one item
            # do something with one order
        # do something with one import

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM