Как получить несколько элементов ElementTree? - PullRequest
0 голосов
/ 08 января 2019

В Python я хочу получить доступ к значениям некоторых элементов. В частности, у меня есть следующая структура, извлеченная из локальной переменной msg:

        <timestamp>2019-01-08T03:45:30-08:00</timestamp>
        <stage>QUEUE</stage>
        <text>Added to NSG run queue.</text>

Я просто хочу напечатать содержимое. Следующий код работает

print(msg.find('timestamp').text, msg.find('stage').text, msg.find('text').text)

но это похоже на чрезмерные накладные расходы. Есть ли более простой способ сделать это?

Ожидаемый результат:

('2019-01-08T03:45:30-08:00', 'QUEUE', 'Added to NSG run queue.')

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Кажется, что вам нужно, это содержимое всех меток, которые могут использовать стандартную библиотеку lib re для достижения этой цели.

import re

exp = '>(.*)</'
print(re.findall(exp, msg))
0 голосов
/ 08 января 2019

Вы можете перебрать элемент msg, чтобы получить его дочерние элементы. Это дает желаемый результат:

from xml.etree import ElementTree as ET

XML = """
<msg>
  <timestamp>2019-01-08T03:45:30-08:00</timestamp>
  <stage>QUEUE</stage>
  <text>Added to NSG run queue.</text>
</msg>"""

msg = ET.fromstring(XML)

print(tuple(c.text for c in msg))  # Tuple
print([c.text for c in msg])       # List
0 голосов
/ 08 января 2019

Попробуйте xmltodict. Это дает вам добавить значения в качестве диктата values().

import xmltodict

s = """<xml>
          <timestamp>2019-01-08T03:45:30-08:00</timestamp>
          <stage>QUEUE</stage>
          <text>Added to NSG run queue.</text>
          </xml>
  """

print(", ".join(xmltodict.parse(s)['xml'].values()))
...