使用python ElementT分析xml文件中的未知元素

2024-05-15 17:16:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望从一个多用途xml文件中提取所有标记名及其对应的数据。然后将这些信息保存到python字典中(例如tag=key,data=value)。捕获的标记名称和值未知且数量未知。在

    <some_root_name>
        <tag_x>bubbles</tag_x>
        <tag_y>car</tag_y>
        <tag...>42</tag...>
    </some_root_name>

我使用的是ElementTree,它可以成功地提取根标记,并且可以通过引用标记名来提取值,但是还没有找到一种方法在不引用标记名的情况下简单地遍历标记和数据。在

任何帮助都会很好。在

谢谢。在


Tags: 文件数据keyname标记名称信息data
3条回答

可以使用xml.sax.handler解析XML:

import xml.sax as sax
import xml.sax.handler as saxhandler
import pprint

class TagParser(saxhandler.ContentHandler):
    # http://docs.python.org/library/xml.sax.handler.html#contenthandler-objects
    def __init__(self):
        self.tags = {}
    def startElement(self, name, attrs):
        self.tag = name
    def endElement(self, name):
        if self.tag:
            self.tags[self.tag] = self.data
            self.tag = None
            self.data = None
    def characters(self, content):
        self.data = content

parser = TagParser()
src = '''\
<some_root_name>
    <tag_x>bubbles</tag_x>
    <tag_y>car</tag_y>
    <tag...>42</tag...>
</some_root_name>'''
sax.parseString(src, parser)
pprint.pprint(parser.tags)

收益率

^{pr2}$
from lxml import etree as ET

xmlString = """
    <some_root_name>
        <tag_x>bubbles</tag_x>
        <tag_y>car</tag_y>
        <tag...>42</tag...>
    </some_root_name> """

document = ET.fromstring(xmlString)
for elementtag in document.getiterator():
   print "elementtag name:", elementtag.tag

编辑: 从文件而不是从字符串读取

^{pr2}$
>>> import xml.etree.cElementTree as et
>>> xml = """
...    <some_root_name>
...         <tag_x>bubbles</tag_x>
...         <tag_y>car</tag_y>
...         <tag...>42</tag...>
...     </some_root_name>
... """
>>> doc = et.fromstring(xml)
>>> print dict((el.tag, el.text) for el in doc)
{'tag_x': 'bubbles', 'tag_y': 'car', 'tag...': '42'}

如果你真的想要42而不是'42',那么你就需要更加努力,不那么优雅。在

相关问题 更多 >