#python #xml #minidom
#python #xml #minidom
Вопрос:
Я прочитал здесь несколько ответов на этот вопрос и все еще не могу его решить.
В принципе, я хочу напечатать значение nodeValue дочернего узла.
Вот xml:
<issues>
<maxResultsReached>true</maxResultsReached>
<paging>
<pageIndex>2</pageIndex>
<pageSize>500</pageSize>
<total>10000</total>
<fTotal>10,000</fTotal>
<pages>20</pages>
</paging>
<issues>
Я пытаюсь получить значение узла «total».
Вот что я написал:
totalIssues = dom.getElementsByTagName('issues')[0].childNodes[1].childNodes[2]
Пока я экспериментировал с единственными результатами, которые я получил, где либо None
, либо пробел.
Кроме того, как я могу получить дочерний узел просто по имени? Поскольку много раз будет присутствовать другой элемент, который сместит положение элемента «total».
Ответ №1:
Получите его в несколько шагов и четко укажите имена тегов:
issue = dom.getElementsByTagName('issues')[0]
paging = issue.getElementsByTagName('paging')[0]
total = paging.getElementsByTagName('total')[0]
print total.firstChild.nodeValue # prints 10000
К вашему сведению, вы видите, что это неинтересно использовать minidom
для синтаксического анализа xml? Хорошо, вот альтернативный вариант использования xml.etree.ElementTree
из стандартной библиотеки:
issues = ET.fromstring(data)
total = issues.find('./paging/total')
print total.text # prints 10000
где data
ваша XML-строка.
Надеюсь, это поможет.
Комментарии:
1. Это сработало! Кроме того, почему я должен ставить firstChild? Я просмотрел документацию по нему и все еще не совсем понимаю.
2. @Renren29 отлично,
firstChild
необходимо вывестиText
узел изtotal
узла.3. @Renren29 вам нужно помочь ускорить процесс? Я видел ваш пост о медленном решении minidom.
4. Спасибо, мне удалось ускорить код на несколько минут. Я этим вполне доволен, и, похоже, он работает надежно.