代码之家  ›  专栏  ›  技术社区  ›  Alex

如何获取元素树的多个元素?

  •  0
  • Alex  · 技术社区  · 6 年前

    在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 回复  |  直到 6 年前
        1
  •  0
  •   Joshua Fox    6 年前

    试试xmltodict。这给了你附加值作为dict的 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()))
    
        2
  •  0
  •   Bob Fred    6 年前

    似乎你想要的是所有标签的内容,可以使用标准库 re 为了达到这个目的。

    import re
    
    exp = '>(.*)</'
    print(re.findall(exp, msg))
    
        3
  •  0
  •   mzjn    6 年前

    您可以在 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