这里有2个类似的XML文件:
长XML
<mynode>
<text>Blah</text>
<position>322,13</position>
</mynode>
短XML
<mynode text="Blah" position="322,13" />
似乎Python的minidom.parse
不喜欢短XML 。
这是 minidom
(xml)可用的短XML样式?
是否可以编写一个唯一的代码,该代码将读取短和长XML?
from xml.dom import minidom
def getChild(n,v):
for child in n.childNodes:
if child.localName==v:
yield child
def getValue(n, val):
res = None
for n in mynode:
rv = getChild(n,val)
for v in rv:
var = v.childNodes[0].nodeValue
res = var
if not res:
for n in mynode:
attr = n.getAttributeNode(val)
if attr:
res = attr.nodeValue.strip()
return res
xmldoc = minidom.parse('file.xml')
mynode = xmldoc.getElementsByTagName('mynode')
print getValue(mynode,'text')
print getValue(mynode,'position')
输出:
Blah
322,13
您需要一个root节点
>>> from xml.dom.minidom import parseString
>>> doc = parseString('<root><mynode text="Blah" position="322,13" /></root>')
>>> print d.firstChild.firstChild.getAttribute('text')
Blah
>>> print d.firstChild.firstChild.getAttribute('position')
322,13