如何解析使用Python编码声明的XML文件?(How to parse an XML file w

2019-10-23 19:45发布

我有这样的XML文件,名为xmltest.xml

<?xml version="1.0" encoding="GBK"?>
<productMeta>
    <bands>1,2,3,4</bands>
    <imageName>TestName.tif</imageName>  
    <browseName>TestName.jpg</browseName>
</productMeta>

我有这个虚拟的Python代码:

import xml.etree.ElementTree as ET
xmldoc = ET.parse('xmltest.xml')

但是,它提出了一个ValueError

ValueError异常:多字节编码,不支持

我明白了这个错误,它会引发因为在XML文件中的第一行编码声明。 XML文件是UTF-8编码,但总是有一个声明(我不是XML文件的创建者进行分析)。 我怎样才能避免这种编码声明解析XML文件,这样前者是什么时候?

Answer 1:

有一两件事,我想,这对我的工作就是打开xml文件作为一个文件对象,然后使用ElementTree.fromstring()传递文件的完整内容。

例如 -

>>> import xml.etree.ElementTree as ET
>>> ef = ET.parse('a.xml')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python34\lib\xml\etree\ElementTree.py", line 1187, in parse
    tree.parse(source, parser)
  File "C:\Python34\lib\xml\etree\ElementTree.py", line 598, in parse
    self._root = parser._parse_whole(source)
ValueError: multi-byte encodings are not supported
>>> with open('a.xml','r') as f:
...     ef = ET.fromstring(f.read())
...
>>> ef
<Element 'productMeta' at 0x028DF180>

您也可以创建一个XMLParser与所需的编码,这应该使您能够解析从编码,例串-

import xml.etree.ElementTree as ET
xmlp = ET.XMLParser(encoding="utf-8")
f = ET.parse('a.xml',parser=xmlp)


Answer 2:

 ET.parse('a.xml', parser=ET.XMLParser(encoding='iso-8859-5'))

解决我的问题时,作了妥善处理XML的蟒蛇练成



文章来源: How to parse an XML file with encoding declaration in Python?