Получить несколько элементов XML в цикле с помощью elementtree - PullRequest
0 голосов
/ 02 февраля 2011

Я пытаюсь перебрать XML-файл с помощью elementtree. Файл выглядит примерно так:

<items>
  <item>
    <name>Blah</name>
    <price>1234</price>
  </item>
  <item>
    <name>Something</name>
    <price>2345</price>
  </item>
</items>

Прочитав это с elementtree, я могу сделать следующее:

for element in doc.findall('/items/item/name):
  print element.text

Но с одной петлей я бы тоже хотел узнать цену ... Примерно так ...

for element in doc.findall('/items/item'):
  print element.name.text
  print element.price.text

... но я не могу. Не уверен, что дальше - мне нужно сделать еще один «поиск» для «элемента»?

Большое спасибо за любую помощь!

Ответы [ 2 ]

4 голосов
/ 02 февраля 2011

Пожалуйста, прочитайте документацию (http://docs.python.org/library/xml.etree.elementtree.html). Вот рабочий пример:

for elem in doc.findall('item'):
   for i in  elem.getchildren():
      print i.text

выходы:

Ли 1234 Что-то 2345

В моем коде я перебираю все элементы в xml и извлекаю текст, присвоенный его дочерним узлам.

2 голосов
/ 02 февраля 2011

Вы можете использовать следующее для детального управления возвращаемыми значениями.

for element in doc.findall('item'): # Get the items out.
    # Iterate thought the list of items(They are in element objects)

    print 'Item' # Yey print stuff out!
    print 'Name: ', element.find('name').text
    print 'Price:', element.find('price').text

Это выводит следующее:

Item
Name: Blah
Price: 1234
Item
Name: Something
Price: 2345

Код сначала захватывает все элементы элемента.Затем он выполняет поиск, чтобы получить цену и имя и печатает результат.Этот код гарантирует, что имя всегда будет напечатано первым, а цена - вторым.

...