2017-07-19 75 views
0

我有这样的XML:蟒蛇minidom命名读取XML

<?DOMParser ?> 
<logbook:LogBook xmlns:logbook="http://www/logbook/1.0" version="1.2"> 
<visits> 
<visit> 
    <general> 
     <startDateTime>2014-01-10T12:22:39.166</startDateTime> 
     <endDateTime>2014-03-11T13:51:31.480</endDateTime> 
    </general> 
</visit> 
<visit> 
<general> 
    <startDateTime>2013-01-10T12:22:39.166</startDateTime> 
    <endDateTime>2013-03-11T13:51:31.480</endDateTime> 
</general> 
</visit> 
</visits> 
</logbook:LogBook> 

我想有从XML输出:

startDateTime   | endDateTime   | 
-----------------------|-----------------------| 
2014-01-10T12:22:39.166|2014-03-11T13:51:31.480| 
-----------------------|-----------------------| 
2013-01-10T12:22:39.166|2013-03-11T13:51:31.480| 

我使用minidom,所以我写了:

import xml.dom.minidom as minidom 
doc=minidom.parse('test.xml') 
general=doc.getElementsByTagName('general')[0] 
startDateTime=general.getAttribute('startDateTime') 
print(startDateTime) 

这将返回空字符串给我。这里有什么帮助?

+1

'startDateTime'是'general',不是一个属性的子元素。 – mzjn

+0

@mzjn你是对的。谢谢 – Safariba

+0

我写道:一般= doc.getElementsByTagName('startDateTime')[0] .firstChild.data – Safariba

回答

1

我更喜欢使用ElementTree类:

from StringIO import StringIO 
from xml.etree.ElementTree import ElementTree 

et = ElementTree(None, StringIO("""<?DOMParser ?> 
<logbook:LogBook xmlns:logbook="http://www/logbook/1.0" version="1.2"> 
<visits> 
    <visit> 
    <general> 
     <startDateTime>2014-01-10T12:22:39.166</startDateTime> 
     <endDateTime>2014-03-11T13:51:31.480</endDateTime> 
    </general> 
    </visit> 
<visit> 
<general> 
    <startDateTime>2013-01-10T12:22:39.166</startDateTime> 
    <endDateTime>2013-03-11T13:51:31.480</endDateTime> 
</general> 
</visit> 
</visits> 
</logbook:LogBook>""")) 

for general in et.iterfind('visits/visit/general'): 
    start = general.findtext('startDateTime') 
    finish = general.findtext('endDateTime') 
    print start, finish 

输出:

2014-01-10T12:22:39.166 2014-03-11T13:51:31.480 
2013-01-10T12:22:39.166 2013-03-11T13:51:31.480 
+0

感谢@迈克罗宾斯,但我想使用minidom,因为我用它的xml的其他部分。 – Safariba

+1

不客气。如果你一直在用[美丽的汤](https://www.crummy.com/software/BeautifulSoup)封装HTML,那么它非常好用并被广泛使用。 –