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

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

问题描述:

由于XML序列如下: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元素?

+0

如果xml看起来很熟悉,那是因为我把它从另一个StackOverflow问题中剥离出来。对原始来源道歉。 – 2010-03-25 02:08:16

+0

不确定你想要做什么 - 是不是.toxml()调用导致它作为文本文件输出?我会认为上面的输出是你期望从.toxml()得到的。你怎么读一个XML然后再输出一个XML文件马上?你想干什么? – fastmultiplication 2010-03-25 02:48:20

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) 

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