格式不正确(无效令牌)

时间:2021-04-05 11:41:19

标签: python python-3.x xml-parsing elementtree

尝试从 netcat 命令返回的 xml 中创建 josn,返回的 xml 如下所示:

(b'<?xml version="1.0" encoding="UTF-8"?>\n<Reply Version="2020.005.021" Status="Passed">\n\t<FileDetails FileCount.DWD="2" NextFrom.QWD="608518" ExitCode.DWD="0">\n\t\t<File Guid="cbcb8339_Feed_ PL World wk6.mxf" VolumeName="000121L5" ArchiveNumber.DWD="7" VolumeGroup="MAIN" FileSize.QWD="36114564233" ArchiveDate="2013/2/14 20:44:50" LastRestoreDate="2018/5/2 12:32:24" RestoreCount.DWD="2" Status="OFFLINE"/>\n\t\t<File Guid="cbcb8339_Feed_ PL World wk6.mxf" VolumeName="000037L7" ArchiveNumber.DWD="31" VolumeGroup="Fodbold_L7" FileSize.QWD="36114564233" ChangerDetail="3 IBM-TS3510" ChangerPosition="Slot 99" ArchiveDate="2018/5/7 08:23:18" LastRestoreDate="2021/4/2 18:16:35" RestoreCount.DWD="3" Status="ONLINE"/>\n\t</FileDetails>\n</Reply>\x00', None)

假设 bytesstr 是上面的 xml,这里是我的代码:

bytesstr = fg_api_cmd.communicate()[0]
        xmlstr = bytesstr.decode('utf-8')
        import xml.etree.ElementTree as ET
        root = ET.fromstring(xmlstr)
        for element in root.iter("*"):
            print(element)

当我运行上面的代码时,出现以下错误:

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 7, column 8

但是,如果我打印出 xmlstr,输出看起来不错:

<?xml version="1.0" encoding="UTF-8"?>
<Reply Version="2020.005.021" Status="Passed">
    <FileDetails FileCount.DWD="2" NextFrom.QWD="608518" ExitCode.DWD="0">
        <File Guid="cbcb8339_Feed_ PL World wk6.mxf" VolumeName="000121L5" ArchiveNumber.DWD="7" VolumeGroup="MAIN" FileSize.QWD="36114564233" ArchiveDate="2013/2/14 20:44:50" LastRestoreDate="2018/5/2 12:32:24" RestoreCount.DWD="2" Status="OFFLINE"/>
        <File Guid="cbcb8339_Feed_ PL World wk6.mxf" VolumeName="000037L7" ArchiveNumber.DWD="31" VolumeGroup="Fodbold_L7" FileSize.QWD="36114564233" ChangerDetail="3 IBM-TS3510" ChangerPosition="Slot 99" ArchiveDate="2018/5/7 08:23:18" LastRestoreDate="2021/4/2 18:16:35" RestoreCount.DWD="3" Status="ONLINE"/>
    </FileDetails>
</Reply>    

如果我将 xml 作为这样的字符串传递,它也可以工作:

xmlstr = '<?xml version="1.0" encoding="UTF-8"?><Reply Version="2020.005.021" Status="Passed"><FileDetails FileCount.DWD="2" NextFrom.QWD="608518" ExitCode.DWD="0"><File Guid="cbcb8339_Feed_ PL World wk6.mxf" VolumeName="000121L5" ArchiveNumber.DWD="7" VolumeGroup="MAIN" FileSize.QWD="36114564233" ArchiveDate="2013/2/14 20:44:50" LastRestoreDate="2018/5/2 12:32:24" RestoreCount.DWD="2" Status="OFFLINE"/><File Guid="cbcb8339_Feed_ PL World wk6.mxf" VolumeName="000037L7" ArchiveNumber.DWD="31" VolumeGroup="Fodbold_L7" FileSize.QWD="36114564233" ChangerDetail="3 IBM-TS3510" ChangerPosition="Slot 99" ArchiveDate="2018/5/7 08:23:18" LastRestoreDate="2021/4/2 18:16:35" RestoreCount.DWD="3" Status="ONLINE"/></FileDetails></Reply>'
    import xml.etree.ElementTree as ET
    root = ET.fromstring(xmlstr)
    for element in root.iter("*"):
        print(element)
<块引用> <块引用> <块引用>
<Element 'Reply' at 0x10bfa3cc0>
<Element 'FileDetails' at 0x10d0160e0>
<Element 'File' at 0x10d016310>
<Element 'File' at 0x10d016450>

我做错了什么吗?

0 个答案:

没有答案
相关问题