安全地获取minidom XML子节点值

时间:2011-06-08 14:59:22

标签: python xml minidom

我第一次使用Python和minidom,并希望从元素中获取值:

<test>value</test>

这很简单,但如果值为空或元素不存在,那么我想回到默认值。我在Python中找不到简单的方法来执行此操作,因此我最终编写了以下函数:

def getXmlValue(address, default):
   """Return XML node value if available, otherwise return a default"""

   # If the xml element is empty then we get an IndexError exception,
   # if the xml element is missing then the 'if' statement is false
   if address:
      try:
         return address[0].childNodes[0].nodeValue
      except IndexError:
         return default

   return default

要打电话给我,我会使用类似的东西:

test = getXmlValue(node.getElementsByTagName('test'), '666')

这完成了工作,似乎工作得很好,但看起来并不高效或优雅。

有更好的方法可以做到这一点还是有什么问题?

2 个答案:

答案 0 :(得分:2)

如果您使用ElementTree,则应该更容易。

from xml.etree.ElementTree import ElementTree, fromstring

xml = '<test>value</test>'
root = fromstring(xml)
test = root.text or '666'

答案 1 :(得分:0)

因为 childNodes 将成为一个数组,所以如何进行长度检查和否则。在我的一些代码中,我有类似下面的内容。如果childNode.length&gt; 0然后我分配一个childNode [0]数据,否则只是一个空字符串。

                my_element = alertitem.getElementsByTagName('solution')[0]
                result.mydata= my_element.childNodes[0].data if my_element.childNodes.length > 0 else ''
对我来说,似乎比尝试更好。