包含 utf-16 编码的 xml 文件出现问题?



我正在使用一些我想用python解析的xml文件。为此,我正在尝试其中一个模块import lxml.etree as etreeimport xml.etree.ElementTree as ET,但两者都有问题。 使用lxml.etree代码:

import lxml.etree as etree
parser = etree.XMLParser(encoding='utf-16')
tree = etree.parse(xml_file, parser)

在解析时给出以下错误:

lxml.etree.XMLSyntaxError: Start tag expected, '<' not found, line 1, column 1

使用模块xml.etree.ElementTree as ET

parser = ET.XMLParser(encoding="utf-16")
tree = ET.parse(xml_file)

给出以下错误:

xml.etree.ElementTree.ParseError: encoding specified in XML declaration is incorrect: line 1, column 30

我正在处理非常复杂的文件,但它可以在小文件上重现:

<?xml version="1.0" encoding="UTF-16"?>
<OrderMessage version="9.0" type="Add"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.sthg.com/sthg/sthg/2019/03">
<Example>test</Example>
</OrderMessage>

另外,我有时观察到,对于某些文件,解析是可以的,但是标签完全搞砸了。 你能帮忙解决这个问题吗?

我不知道下面的代码是否可以解决你的问题。你试试,如果它有效,我们可以沟通下一个需求。

from simplified_scrapy import SimplifiedDoc,req,utils
# html = utils.getFileContent(xml_file,encoding="utf-16") # Replace with your real XML file
html = '''
<?xml version="1.0" encoding="UTF-16"?>
<OrderMessage version="9.0" type="Add"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.sthg.com/sthg/sthg/2019/03">
<Example>test</Example>
</OrderMessage>
'''
doc = SimplifiedDoc(html)
print (doc.Example.text)

结果:

test

最新更新