使用ElementTree Python解析XML

时间:2017-04-05 15:38:13

标签: python xml python-2.7 parsing xml-parsing

使用Python中的ElementTree解析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>

我在尝试解析文件并检索'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()

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

yourTag.attrib.get("the_attribute")

答案 2 :(得分:0)

您的解析错误位于第90列,但您共享的xml代码段只有32列。如果此文件由套接字对象生成,则可能在第2行中的有效xml后面有额外的不可打印字符。可能需要更新创建此文件的代码以正确终止它接收的行中的字符串。