【问题标题】:How to deal with not well-formed character in xml file with elementtree in python如何使用python中的elementtree处理xml文件中格式不正确的字符
【发布时间】:2012-07-02 14:53:57
【问题描述】:

我正在使用ElementTree.parse 函数解析用utf-16 编码的xml 文件。 当文件包含一些格式不正确的字符(例如♀, ♂ .etc)时,程序会崩溃。并且出现错误“xml.parsers.expat.ExpatError: not well-formed (invalid token)”。 我怎样才能避免这个错误并解决这个问题?我怎么能忽略这些格式不正确的字符?谢谢!以下是我的代码:

tree = ElementTree()
root = tree.parse(xml_file)

xml_file 是以 UTF-16 格式编码的文件。 错误会指出格式不正确的字符的行号和列号。

【问题讨论】:

  • 您没有提供足够的信息。代币放在哪里?里面的标签、属性名、属性值还是元素值?它们在 CDATA 事物之间吗?文件真的是用 UTF-16 编码的吗?如果标头设置正确?
  • 字符在元素值中。是的,它在 CDATA 事物之间。
  • @Blubber xml内容是这样的:♂ John
  • 如果您在问题中显示您编写的代码会很方便,以便我可以详细说明我的答案。
  • @MarcodeWit 感谢您的回复。我已经在问题中展示了我的代码。

标签: python xml xml-parsing elementtree


【解决方案1】:

由于xml.parsers.expat.ParserCreate 仅支持四种编码,我将全部尝试。这些编码是: UTF-8UTF-16ISO-8859-1Latin1)和ASCII

您现在可以使用以下编码运行ElementTree.parse

from xml.etree.ElementTree import ElementTree
from xml.parsers import expat
tree = ElementTree()
root = tree.parse(xml_file, parser=expat.ParserCreate('UTF-8') )
root = tree.parse(xml_file, parser=expat.ParserCreate('UTF-16') )
root = tree.parse(xml_file, parser=expat.ParserCreate('ISO-8859-1') )
root = tree.parse(xml_file, parser=expat.ParserCreate('ASCII') )

【讨论】:

  • 你能提供更多细节吗?一些代码片段? @Marco de Wit
【解决方案2】:

你需要建立两件事。

(a) 是否有 XML 声明以及它对编码的说明?

(b) 文件中用于表示这些字符的实际字节数是多少?

【讨论】:

  • 感谢您的回复。文件开头有一个 XML 声明,表明编码格式为 UTF_16。
猜你喜欢
  • 2020-09-17
  • 2012-07-08
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2014-04-25
  • 2021-11-12
相关资源
最近更新 更多