簡體   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