如何获得一个ElementTree的多个元素?

时间:2019-01-08 12:16:24

标签: python xml elementtree

在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 :(得分:0)

尝试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()))

答案 1 :(得分:0)

您似乎想要的是所有标签的内容,可以使用标准的lib re来实现。

import re

exp = '>(.*)</'
print(re.findall(exp, msg))

答案 2 :(得分:0)

您可以遍历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