Python使用minidom处理XML
我有一个非常简单的XML文件,我想用minidom快速解析每个设备的imsi元素。
<device>
<imsi>01010101</imsi>
</device>
<device>
<imsi>123456</imsi>
</device>
<device>
<imsi>9876543</imsi>
</device>
--------------------------
CODE SNIPPET FOR PARSING
--------------------------
doc = xml.dom.minidom.parse("./input.xml")
for node in doc.getElementsByTagName("device"):
imsi = node.getElementsByTagName("imsi")
print str(imsi)
当我运行上面的代码时,终端出现了下面的错误。你觉得我应该对上面的代码做什么改进,以便解析每个设备的imsi元素呢?谢谢。
doc = xml.dom.minidom.parse("./input.xml")
File "/usr/lib/python2.6/site-packages/_xmlplus/dom/minidom.py", line 1915, in parse
return expatbuilder.parse(file)
File "/usr/lib/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 926, in parse
result = builder.parseFile(fp)
File "/usr/lib/python2.6/site-packages/_xmlplus/dom/expatbuilder.py", line 207, in parseFile
parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: junk after document element: line 4, column 0
在我添加了一个根节点后,我写了以下代码,但输出结果很奇怪。你觉得这里有什么问题吗?
doc = xml.dom.minidom.parse("./input.xml")
for node in doc.getElementsByTagName("device"):
imsi = node.getElementsByTagName("imsi")
print str(imsi)
[<DOM Element: imsi at 0x828636c>]
[<DOM Element: imsi at 0x82864ac>]
[<DOM Element: imsi at 0x828660c>]
下面的代码解决了我的问题,并正确打印了IMSI元素:
for node in doc.getElementsByTagName("device"):
imsi = node.getElementsByTagName("imsi")
for a in imsi:
Title= a.firstChild.data
print Title
2 个回答
1
你的xml文件不合法。请在你的xml中添加一个根节点。
你可以在这里检查你的xml是否有效:W3C标记验证器。
<document>
<device>
<imsi>01010101</imsi>
</device>
<device>
<imsi>123456</imsi>
</device>
<device>
<imsi>9876543</imsi>
</device>
</document>
如果你想让你的xml完全有效,那么就要在里面添加一个文档类型声明
。
2
你的示例不是一个有效的XML文档,因为它没有根节点。你需要加一个根节点,像这样:
<devices>
<device>
<imsi>01010101</imsi>
</device>
<device>
<imsi>123456</imsi>
</device>
<device>
<imsi>9876543</imsi>
</device>
</devices>