2017-04-05 109 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后面有额外的不可打印字符。创建此文件的代码可能需要更新以正确终止其接收的行中的字符串。