我正在使用一些我想用python解析的xml文件。为此,我正在尝试其中一个模块import lxml.etree as etree
或import 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