2017-04-05 5 views
1

PythonでElementTreeを使用してXMLファイルを解析する。ファイルを解析し、「fqdm」の属性の値を取得しようとしたときに、私は(下)エラーが発生しますElementTree Pythonを使用したXMLの解析

<?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> 

:ここ

はファイルです。

「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

'' print(root) ''を実行すると、 '' <0x7fa64ff63548> ''のような要素が表示されます。だから、私は '' Device''がルート要素だと思います。 – GLR

+0

正解私はすでにそれをチェックしています。それはまだそのジャンクエラーを投げている。私は別の要素としてそれを置くことができるが、私はむしろそれが属性になるだろう! –

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

あなたのパースエラーが列90であるが、XMLが唯一持っているあなたが共有スニペット32列。このファイルがソケットオブジェクトによって生成された場合は、おそらく2行目の有効なXMLに続いて余分な印字不可能な文字があります。このファイルを作成するコードは、受け取った行の文字列を正しく終了させるために更新する必要があります。

関連する問題