XML文档被解析为单个元素而不是节点序列

时间:2010-03-25 02:07:29

标签: python xml minidom

给定xml如下:

<Store>
<foo>
<book>
<isbn>123456</isbn>
</book>
<title>XYZ</title>
<checkout>no</checkout>
</foo>
<bar>
<book>
<isbn>7890</isbn>
</book>
<title>XYZ2</title>
<checkout>yes</checkout>
</bar>
</Store>

我得到的是我解析的xmldoc:

>>> from xml.dom import minidom
>>> xmldoc = minidom.parse('bar.xml')
>>> xmldoc.toxml()
u'<?xml version="1.0" ?><Store>\n<foo>\n<book>\n<isbn>123456</isbn>\n</book>\n<t
itle>XYZ</title>\n<checkout>no</checkout>\n</foo>\n<bar>\n<book>\n<isbn>7890</is
bn>\n</book>\n<title>XYZ2</title>\n<checkout>yes</checkout>\n</bar>\n</Store>'

是否有一种简单的方法来预处理此文档,以便在解析时,它不会被解析为单个xml元素?

2 个答案:

答案 0 :(得分:2)

XML文档始终具有单个根元素。如果您不关心根元素,请忽略它并查看其子元素!

例如,使用更现代的元素树(但minidom在这方面提供了类似的可能性):

try:
  import xml.etree.cElementTree as et
except ImportError:
  import xml.etree.ElementTree as et

xmlin = '''<Store>
<foo>
<book>
<isbn>123456</isbn>
</book>
<title>XYZ</title>
<checkout>no</checkout>
</foo>
<bar>
<book>
<isbn>7890</isbn>
</book>
<title>XYZ2</title>
<checkout>yes</checkout>
</bar>
</Store>'''

root = et.fromstring(xmlin)

for child in root.getchildren():
  print et.tostring(child)

答案 1 :(得分:0)

xmldoc是一个已解析的XML对象。 toxml()要求它再次将自身转换回XML文本字符串。进一步探索:

>>> xmldoc.childNodes
[<DOM Element: Store at 0x212b788>]
>>> xmldoc.childNodes[0].childNodes
[<DOM Text node "u'\n'">, <DOM Element: foo at 0x212bcd8>, <DOM Text node "u'\n'">, <DOM Element: bar at 0x212b2d8>, <DOM Text node "u'\n'">]

然后,意识到DOM很难使用并阅读ElementTree