简体   繁体   中英

Parsing XML using ElementTree Python

Parsing an XML file with ElementTree in Python.

Here is the file:

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

I am receiving the error (below) when trying to parse the file and retrieve the value of the attribute of 'fqdm'.

"xml.etree.ElementTree.ParseError: junk after document element: line 2, column 90"

Here is the parsing code (please ignore the stupid file handling, it will be changed):

        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()

Try this:

    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()
yourTag.attrib.get("the_attribute")

Your parse error is at column 90, but the xml snippet you shared only has 32 columns. If this file is generated by your socket object, you probably have extra unprintable characters following the valid xml in line 2. The code that creates this file probably needs to be updated to properly terminate the strings in the lines it receives.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM