【问题标题】:read XML file with Python用 Python 读取 XML 文件
【发布时间】:2015-02-05 19:57:42
【问题描述】:

我正在尝试编写一个插件来从 XML 文件中读取数据

test.xml里面有:

<data>
    <items>
        <item test1="Arabic Words"></item>
        <item test2="English Words"></item>
    </items>
</data>

代码是:

# coding: utf-8

from xml.dom import minidom
xmldoc = minidom.parse('test.xml')
itemlist = xmldoc.getElementsByTagName('item')

test1 = itemlist[0].attributes['test1'].value
test2 = itemlist[1].attributes['test2'].value

print(test1)
print(test2)

但是我遇到编码问题:无法设置为utf-8。

如何让minidom 解释具有 UTF-8 编码的文件?

【问题讨论】:

  • 你试过用xml.sax解析吗?
  • @mr.somebody 我想答案是否定的......另外,你没有将它设置为 UTF-8 的问题是什么。您能否发布错误消息或至少显示您的预期结果?

标签: python xml utf-8


【解决方案1】:

通常,有效的 XML 以 XML 伪标签开头,包含编码:

<?xml version="1.0" encoding="UTF-8"?>
...

minidom 应该尊重这一点;如果您的文件有这样的标签但未被解释为 UTF-8,您应该针对minidom 提交错误;但我通常希望您的文件根本不包含这一行。

你可以使用

minidom.parseString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + open("file.xml","r").read())

解决这个问题(但我建议修复您的 XML 文件)。

【讨论】:

  • 您是否修复了文件或添加了字符串离合器?顺便说一句(批评不多,更多的是作为一种灵感):当公开写东西,或者在电子邮件中对某人讲话时,尽量避免使用“u”;和“你”在一起,你听起来不像是发短信的青少年。
  • 是的,我添加了这个:
  • 然后 xmldoc = minidom.parseString("\n" + open("test.xml"," r").read())
  • 要么将字符串添加到文件中,使用我的parseString。请尝试了解您在做什么。
【解决方案2】:

使用编码/解码函数或导入编解码器。

示例: x = 'abcd' y = x.encode('utf-8') y.decode('utf-8')

只需使用编码/解码并使用 minidom 来解析字符串而不是传递文件名。

【讨论】:

  • 我刚刚用你正在使用的同一个文件试了一下;它适用于编码/解码,没有编码/解码,有 BOM,没有 BOM ......问题一定出在其他地方,minidom 可以顺利解析文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
相关资源
最近更新 更多