Есть ли быстрый способ получить элемент XML из пути? - PullRequest
2 голосов
/ 20 октября 2011

Есть ли быстрый способ взять этот блок XML и извлечь значение "version"?

   <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>

Я знаю, что могу сделать это с помощью Beautiful Soup в Python, но я ищу простой способ сделать это с DOM.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 20 октября 2011

Если вы ищете элемент версии, а не атрибуты версии, используя 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 голосов
/ 20 октября 2011

Если у вас не установлена ​​ lxml , вы можете использовать ElementTree, входящий в стандартную библиотеку:

>>> import xml.etree.ElementTree
>>> doc = xml.etree.ElementTree.fromstring(content)
>>> doc.findtext('creator/version')
'1.0.3'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...