首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取具有二进制内容的XML

读取具有二进制内容的XML
EN

Stack Overflow用户
提问于 2019-11-18 13:02:05
回答 1查看 3K关注 0票数 2

我想使用Python读取一个VTU文件,该文件是XML,可能包含二进制数据。规格说:

有一种情况是,文件不是有效的XML文档。当AppendedData部分未编码为base64时,就会出现可能违反base64规范的原始二进制数据。这不是默认行为,必须由用户显式启用。

例如,检查dragon.vtu

代码语言:javascript
复制
<VTKFile type="UnstructuredGrid" version="1.0" byte_order="LittleEndian" header_type="UInt64">
  <UnstructuredGrid>
    <Piece NumberOfPoints="69827" NumberOfCells="139650">
      <Cells>
        <DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="837932"/>
        <DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="4189540"/>
        <DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="5306748"/>
      </Cells>
    </Piece>
  </UnstructuredGrid>
  <AppendedData encoding="raw">
   _$É�����ıAdÌAÁÊÃÿ@>yAn£GÁÏAA(~AÁþ`AF¶Áo.@Ô«¬A3Ä|Ásc2@ï8±A cÁÉX@®AZ/AϱÁ:»AA)³Á(ÉAs!AFÁ\A½A*ÁyA*)AéÔÁØÓAÀ¡Aã_ÁóA`öBÌ]gADé¸AdBdÌnA|r·AhB^ºnA­zºAȦ
   [...]

天真地做

代码语言:javascript
复制
import xml.etree.ElementTree as ET
parser = ET.XMLParser()
tree = ET.parse("dragon.vtu", parser)

不起作用:

代码语言:javascript
复制
Traceback (most recent call last):
  File "f.py", line 3, in <module>
    tree = ET.parse("dragon.vtu", parser)
  File "/usr/lib/python3.7/xml/etree/ElementTree.py", line 1197, in parse
    tree.parse(source, parser)
  File "/usr/lib/python3.7/xml/etree/ElementTree.py", line 604, in parse
    parser.feed(data)
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 28, column 5

有什么暗示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-18 13:16:19

问题是,由于数据包含非法字符,所以数据不是XML,因此任何符合XML的解析器都会正确地拒绝它。

修复上游的问题:而不是直接嵌入二进制数据,首先编码为Base64

也见

我不能解决上游的问题.

然后,您将处于一个不幸的境地,即接收到的数据不是XML。有关选项,请参见以下内容:如何解析无效(糟糕/不正确) XML?

...since二进制内容是VTU规范的一部分.

任何在XML中包含无约束二进制数据的规范都会被破坏。您的选项包括解析糟糕的XML (请参阅上面的链接),只使用罪犯提供的库/工具包,或者编写您自己的库/工具箱--这不是很好的选项,但这是供应商不遵循XML规范的后果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58915179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档