2017-04-05 104 views
1

在Python中使用ElementTree解析XML文件。使用ElementTree解析XML Python

以下是文件:

<?xml version='1.0' encoding='utf-8'?> 
<Device fqdm="DESKTOP-4OB3072"> 
    <IP>192.168.203.1</IP> 
    <MAC>00:00:00:00:00:00</MAC> 
</Device> 

我收到錯誤(下)試圖解析文件和檢索「fqdm」的屬性的值時。

「xml.etree.ElementTree.ParseError:垃圾文檔元素之後:第2行,列90」

這裏是解析代碼(請忽略笨文件處理,它將被改變):

 with open('received_file.xml', 'a+') as f: 
     while True: 
      data = conn.recv(BUFFER_SIZE) 

      print data 
      if not data: 
       f.close() 
       break 
      f.write(data) 
      f.close() 
      g = open('received_file.xml', 'r+') 
      tree = ET.parse(g) 
      root = tree.getroot() 
      print root 
      test = root.find('./Device').attrib['fqdm'] 
      print test 

     sock.close() 

回答

0

試試這個:

with open('received_file.xml', 'a+') as f: 
    while True: 
     data = conn.recv(BUFFER_SIZE) 

     print data 
     if not data: 
      f.close() 
      break 
     f.write(data) 
     f.close() 
     g = open('received_file.xml', 'r+') 
     tree = ET.parse(g) 
     root = tree.getroot() 
     attributes = root.attrib 
     print root 
     test = attributes['fqdm'] 
     print test 

    sock.close() 
+0

這似乎並沒有做到這一點,我確信XML是有效的......許多其他帖子表明,沒有根元素。這是什麼拋出錯誤? –

+0

如果你打印(root)'',你會看到類似這樣的內容:'''。所以,我認爲''Device''是根元素。 – GLR

+0

正確我已經檢查過。它仍然拋出那個垃圾錯誤。我可以把它作爲另一個元素,但我寧願它是一個屬性! –

0
yourTag.attrib.get("the_attribute") 
0

你的語法錯誤是在90列,但XML片段您共享只有32列。如果此文件是由套接字對象生成的,則可能在第2行中的有效xml後面有額外的不可打印字符。創建此文件的代碼可能需要更新以正確終止其接收的行中的字符串。