[英]How to extract file xml attribute using Python ElementTree -Glue Job
[英]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.