繁体   English   中英

如何正确找到列表 ElementTree 元素的索引

[英]How to properly find an index of a list ElementTree element

我想在根列表中找到一个特定的子元素,在本例中是 LocationSalesDetail。 打印树根列表后,您可以看到有一堆 LocationSalesDetail 实例,但是当我尝试将它们拉入索引时,它说找不到。 我查看了文档,但无法确切地看出我做错了什么,尽管我确信它非常简单。

tree = ET.parse('test.xml')
root = tree.getroot()

print(list(root))
list(root).index('LocationSalesDetail')

tree.write('test2.xml')

恼人的

作为参考,test.xml 的粗略 XML 结构如下:

<SalesTransactions>
-->CompanyNumber
-->SendingSystem
-->LocationSalesDetail
---->InvoiceNumber
---->InvoiceInformation
-->LocationSalesDetail
---->InvoiceNumber
---->InvoiceInformation
-->LocationSalesDetail
---->InvoiceNumber
---->InvoiceInformation

因为你的XML文件结构不清晰,你到底要找什么,如果你要索引? 我为索引创建行号和列表号。 我假设您的 XML 文件看起来像这样 - 输入:

<?xml version="1.0" encoding="utf-8"?>
<SalesTransactions>
  <CompanyNumber>my_customer</CompanyNumber>
  <SendingSystem>
    <LocationSalesDetail name="DE">
      <InvoiceNumber>1</InvoiceNumber>
      <InvoiceInformation>A</InvoiceInformation>
    </LocationSalesDetail>
    <LocationSalesDetail name="UK">
      <InvoiceNumber>2</InvoiceNumber>
      <InvoiceInformation>B</InvoiceInformation>
    </LocationSalesDetail>
    <LocationSalesDetail name="US">
      <InvoiceNumber>3</InvoiceNumber>
      <InvoiceInformation>C</InvoiceInformation>
    </LocationSalesDetail>
  </SendingSystem>
</SalesTransactions>

你可以使用enumerate()创建一个元组列表:

import xml.etree.ElementTree as ET

tree = ET.parse('Invoice.xml')
root = tree.getroot()

Location_list = root.findall('.//LocationSalesDetail')

line_No = enumerate(root.iter())
for line in line_No:
    #print(line[0], line[1].tag)
    if line[1].tag =="LocationSalesDetail":
        print(line[1].tag, "   Line No:",line[0], line[1].get('name'))

print('\n')
for elem in enumerate(Location_list):
    print("List No:", elem[0], elem[1].get('name'))
    
print('\n')
# ET.dump(root)

输出:

LocationSalesDetail    Line No: 3 DE
LocationSalesDetail    Line No: 6 UK
LocationSalesDetail    Line No: 9 US


List No: 0 DE
List No: 1 UK
List No: 2 US

暂无
暂无

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

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