Проблема с получением значения дочернего узла в Python minidom

#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. Спасибо, мне удалось ускорить код на несколько минут. Я этим вполне доволен, и, похоже, он работает надежно.