如何在Python中解析带有编码声明的XML文件?

2024-06-01 04:07:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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: multi-byte encodings are not supported

我理解这个错误,它产生的原因是XML文件第一行的编码声明。XML文件是UTF-8编码的,但总是有那个声明(我不是要分析的XML文件的创建者)。在解析XML文件时,如何避免这样的编码声明?


Tags: 文件声明编码versionxmlencodingetvalueerror
2条回答
 ET.parse('a.xml', parser=ET.XMLParser(encoding='iso-8859-5'))

在python中处理xml excel时解决了我的问题

我尝试过的一件事,对我有效的是将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)

相关问题 更多 >