【问题标题】:Is there a quick way to get an XML element from a path?有没有一种从路径中获取 XML 元素的快速方法?
【发布时间】:2011-10-19 20:55:02
【问题描述】:

有没有一种快速的方法来获取这个 XML 块并提取“版本”的值?

   <xml>
   <creator version='1.0'>
     <program>BULK_EXTRACTOR</program>
     <version>1.0.3</version>
     <build_environment>
       <compiler>GCC 4.2</compiler>
       <compilation_date>2011-09-27T11:56:35</compilation_date>
       <library name="afflib" version="3.6.12"></library>
       <library name="libewf" version="20100226"></library>
     </build_environment>
    </creator>
    </xml>

我知道我可以用 Python 的 Beautiful Soup 做到这一点,但我正在寻找一种简单的方法来用 DOM 做到这一点。

谢谢!

【问题讨论】:

  • 你指的是哪个"version"

标签: python xml-parsing


【解决方案1】:

假设您正在寻找版本元素,而不是版本属性, 使用lxml:

import lxml.etree as ET

content='''\
   <xml>
   <creator version='1.0'>
     <program>BULK_EXTRACTOR</program>
     <version>1.0.3</version>
     <build_environment>
       <compiler>GCC 4.2</compiler>
       <compilation_date>2011-09-27T11:56:35</compilation_date>
       <library name="afflib" version="3.6.12"></library>
       <library name="libewf" version="20100226"></library>
     </build_environment>
    </creator>
    </xml>
'''

doc=ET.fromstring(content)
version=doc.xpath('creator/version/text()')[0]
print(version)
# 1.0.3

要查找版本属性:

for elt in doc.xpath('//*[@version]'):
    print(elt.tag, elt.attrib.get('name'), elt.attrib.get('version'))
# ('creator', None, '1.0')
# ('library', 'afflib', '3.6.12')
# ('library', 'libewf', '20100226')

【讨论】:

    【解决方案2】:

    如果你没有安装lxml,你可以使用包含在标准库中的ElementTree:

    >>> import xml.etree.ElementTree
    >>> doc = xml.etree.ElementTree.fromstring(content)
    >>> doc.findtext('creator/version')
    '1.0.3'
    

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多