我有一个看起来像是 .XML 的文件(它甚至有一个
<?xml version="1.0" encoding="utf-8"?>
标头)。但在标题之前,当我在 Notepad++ 中打开文件时,有随机字母和一些 NULL 字符。
查看文件,在.XML标准编写之后,有很多随机字符(我认为,根据我的文件的来源,它是来自传感器的数据)
我正在尝试用 python 打开它来处理数据,但我找不到方法。通常,对于 .XML 文件,我会使用元素树打开它。我尝试使用 open 读取二进制数据,但缓冲区返回的数据流仅显示 Notepad++ 中显示的字符。
我不知道我的问题是否有解决方案,或者我是否需要一本字典来翻译这些随机字符。
我将不胜感激任何人能给我的任何帮助!
我尝试过使用Element Tree、python的open方法和struct unpack。
xml.parsers.expat
,它应该在删除前导 NUL 字符后起作用,请考虑以下示例
import xml.parsers.expat
enveloped_xml = '\x00\x00\x00<?xml version="1.0"?><outer outattr="outval"><inner inattr="inval">data</inner></outer>\xDE\xAD\xBE\xEF'
def start_element(name, attrs):
print('Start element:', name, attrs)
def end_element(name):
print('End element:', name)
def char_data(data):
print('Character data:', repr(data))
p = xml.parsers.expat.ParserCreate()
p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data
try:
p.Parse(enveloped_xml.lstrip('\x00'), 1)
except xml.parsers.expat.ExpatError:
pass
提供输出
Start element: outer {'outattr': 'outval'}
Start element: inner {'inattr': 'inval'}
Character data: 'data'
End element: inner
End element: outer
代码基于 文档中的示例,观察
enveloped_xml
是 str,因此如果您有字节,则需要先 .decode
它们。解析器在 XML 之后抛出垃圾错误,但这是在处理正确的 XML 之后。