我正在处理一些我想用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