Безопасное получение значения дочернего узла minidom XML - PullRequest
2 голосов
/ 08 июня 2011

Я впервые использую 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 ]

2 голосов
/ 17 ноября 2011

Если вы используете ElementTree, это должно быть намного проще.

from xml.etree.ElementTree import ElementTree, fromstring

xml = '<test>value</test>'
root = fromstring(xml)
test = root.text or '666'
0 голосов
/ 12 октября 2014

, так как childNodes будет массивом, как насчет простой проверки длины и принятия решения в противном случае. в некоторых моих кодах у меня есть что-то вроде ниже Если childNode.length> 0, тогда я присваиваю данные childNode [0], иначе просто пустую строку.

                my_element = alertitem.getElementsByTagName('solution')[0]
                result.mydata= my_element.childNodes[0].data if my_element.childNodes.length > 0 else ''

мне кажется лучше, чем попытка, кроме.

...