首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xml.etree解析XML (仅限于)

使用xml.etree解析XML (仅限于)
EN

Stack Overflow用户
提问于 2014-05-02 15:25:41
回答 2查看 334关注 0票数 1

使用xml.etree (请使用此模块)

我如何解析:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<EntityPath="c:\a.zip" Name="a.zip" >
   <WorkfileDescription>something</WorkfileDescription>
   <Revision EntityPath="c:\a.zip" Name="1.1" Author="me">
      <ChangeDescription>Some comentary</ChangeDescription>
      <PGROUP Name="A" />
      <PGROUP Name="B" />
      <PGROUP Name="C" />
      <Label Name="SOFTWARE" />
      <Label Name="READY" />
   </Revision>
   <Revision EntityPath="c:\a.zip" Name="1.0" Author="me">
      <ChangeDescription>Some comentary</ChangeDescription>
      <PGROUP Name="A" />
      <Label Name="GAME" />
      <Label Name="READY" />
   </Revision>
</VersionedFile>

为了得到:

代码语言:javascript
复制
Revision: a.zip
Name: 1.1
Author: me
ChangeDescription: Some comentary
PGROUP: A
PGROUP: B
PGROUP: C
Label: SOFTWARE
Label: READY

Revision: a.zip
Name: 1.0
Author: me
ChangeDescription: Some comentary
PGROUP: A
Label: GAME
Label: READY

到目前为止,使用下面的代码,我只能获得修订行,但我很难解析其他子字段:

代码语言:javascript
复制
from xml.etree import ElementTree
try:
    tree = ElementTree.parse(self.xml)
    root = tree.getroot()
    info_list = []
    for child in root:
        print(child.tag,child.attrib)


except Exception:
    raise
finally:
    self.xml = None
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-02 15:38:31

查找所有Revision标记,打印来自element.attrib的所有属性,遍历Revision元素以获得子元素和Name属性值:

代码语言:javascript
复制
import xml.etree.ElementTree as etree


data = """<?xml version="1.0" encoding="UTF-8"?>
<VersionedFile EntityPath="c:\\a.zip" Name="VfOMP_CRM.zip">
   <WorkfileDescription>something</WorkfileDescription>
   <Revision EntityPath="c:\\a.zip" Name="1.1" Author="me">
      <ChangeDescription>Some comentary</ChangeDescription>
      <PGROUP Name="A" />
      <PGROUP Name="B" />
      <PGROUP Name="C" />
      <Label Name="SOFTWARE" />
      <Label Name="READY" />
   </Revision>
   <Revision EntityPath="c:\\a.zip" Name="1.0" Author="me">
      <ChangeDescription>Some comentary</ChangeDescription>
      <PGROUP Name="A" />
      <Label Name="GAME" />
      <Label Name="READY" />
   </Revision>
</VersionedFile>
"""

tree = etree.fromstring(data)
for revision in tree.findall('Revision'):
    for key, value in revision.attrib.iteritems():
        print "%s: %s" % (key, value)

    for child in revision:
        print "%s: %s" % (child.tag, child.attrib.get('Name', ''))

    print

指纹:

代码语言:javascript
复制
Name: 1.1
EntityPath: c:\a.zip
Author: me
ChangeDescription: 
PGROUP: A
PGROUP: B
PGROUP: C
Label: SOFTWARE
Label: READY

Name: 1.0
EntityPath: c:\a.zip
Author: me
ChangeDescription: 
PGROUP: A
Label: GAME
Label: READY

您可能需要对其进行一些调整,以获得所需的输出,但这将给您提供基本的想法。

票数 2
EN

Stack Overflow用户

发布于 2014-05-02 16:08:53

基于alecxe解决方案,我能够让它使用:

代码语言:javascript
复制
    from xml.etree import ElementTree
    try:
        tree = ElementTree.parse(self.xml)
        info_list = []
        for revision in tree.findall('Revision'):
            for key, value in revision.attrib.iteritems():
                values = dict()
                values[key] = value
                info_list.append(values)
                #print "%s: %s" % (key, value)
            for child in revision:
                values = dict()
                # this is needed to match the change description field.
                if child.tag == 'ChangeDescription':
                    values[child.tag] = child.text
                    #print "%s: %s" % (child.tag, child.text)
                else:
                    values[child.tag] = child.attrib.get('Name', '')
                    #print "%s: %s" % (child.tag, child.attrib.get('Name', ''))
                info_list.append(values)

            print

        for i in info_list:
            print(i)

    except Exception:
        raise
    finally:
        self.xml = None
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23431656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档