python 处理解析xml时候报错问题

时间:2019-02-21
本文章向大家介绍python 处理解析xml时候报错问题,主要包括python 处理解析xml时候报错问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

(1)、报错异常:

Traceback (most recent call last):
  File "output_xml.py", line 8, in <module>
    object_data=ET.ElementTree(file=data_file)
  File "/usr/local/python35/lib/python3.6/xml/etree/ElementTree.py", line 557, in __init__
    self.parse(file)
  File "/usr/local/python35/lib/python3.6/xml/etree/ElementTree.py", line 597, in parse
    self._root = parser._parse_whole(source)
ValueError: multi-byte encodings are not supported

(2)、xml源文件分析:

<?xml version="1.0" encoding="gbk"?>
<xml>
<FILE_STRUCTURE>
        <Field>
                <FieldNo>0</FieldNo>
                <FieldName>RELATED_PROVINCE_NAME</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>RELATED_PROVINCE_NAME</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>1</FieldNo>
                <FieldName>RELATED_CITY_NAME</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>RELATED_CITY_NAME</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>2</FieldNo>
                <FieldName>RELATED_COUNTY_NAME</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>RELATED_COUNTY_NAME</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>3</FieldNo>
                <FieldName>RELATED_SITE_CUID</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>RELATED_SITE_CUID</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>4</FieldNo>
                <FieldName>RES_CODE</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>RES_CODE</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>5</FieldNo>
                <FieldName>DEVICE_CODE</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>DEVICE_CODE</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>6</FieldNo>
                <FieldName>TYPE</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>TYPE</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>7</FieldNo>
                <FieldName>LABEL_CN</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>LABEL_CN</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>8</FieldNo>
                <FieldName>SIGNAL_STA_NAME</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>SIGNAL_STA_NAME</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>9</FieldNo>
                <FieldName>VALUE</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>VALUE</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>10</FieldNo>
                <FieldName>REPORTED_TIME</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>REPORTED_TIME</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>11</FieldNo>
                <FieldName>battery_capacity</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>battery_capacity</FieldNameOther>
        </Field>
        <Field>
                <FieldNo>12</FieldNo>
                <FieldName>dc_load_current</FieldName>
                <FieldType>SQL_VARCHAR(255)</FieldType>
                <FieldNameOther>dc_load_current</FieldNameOther>
        </Field>
</FILE_STRUCTURE>
</xml>

(3)、第一次执行python脚本:

Traceback (most recent call last):
  File "output_xml.py", line 8, in <module>
    object_data=ET.ElementTree(file=data_file)
  File "/usr/local/python35/lib/python3.6/xml/etree/ElementTree.py", line 557, in __init__
    self.parse(file)
  File "/usr/local/python35/lib/python3.6/xml/etree/ElementTree.py", line 597, in parse
    self._root = parser._parse_whole(source)
ValueError: multi-byte encodings are not supported

(4)、修改xml的编码格式:

把源文件的<?xml version="1.0" encoding="gbk"?> 改成 <?xml version="1.0" encoding="utf-8"?>再试试执行脚本看看

(5)、第二次执行脚本:

<xml.etree.ElementTree.ElementTree object at 0x7fa5037e72b0>
根元素名: xml
根元素属性列表: {}
根元素属包含内容: {}

(6)、源码脚本:

#!/usr/bin/python3
#coding=gbk

data_file='X1550658004008726.xml'

import xml.etree.ElementTree as ET

object_data=ET.ElementTree(file=data_file)

print(object_data)

root=object_data.getroot()

print("根元素名:",root.tag)

print("根元素属性列表:",root.attrib)

print("根元素属包含内容:",root.attrib)