#python #xml #minidom
#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')
Это выполняет свою работу и, похоже, работает нормально, но не кажется таким уж эффективным или элегантным.
Есть ли лучший способ сделать это или с этим что-то не так?
Комментарии:
1. Это выглядит совершенно разумным способом получения значения без ошибок.
Ответ №1:
Если вы используете ElementTree
, это должно быть намного проще.
from xml.etree.ElementTree import ElementTree, fromstring
xml = '<test>value</test>'
root = fromstring(xml)
test = root.text or '666'
Ответ №2:
поскольку дочерние узлы будут представлять собой массив, как насчет того, чтобы просто выполнить проверку длины и принять иное решение. в некоторых моих кодах у меня есть что-то вроде приведенного ниже. Если 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 ''
для меня это кажется лучше, чем попытка, за исключением.