Python模块学习之xml.etree.ElementTree

该文章为笔者查看官方文档,并结合阅读网上博客自己归纳总结的一些心得,必然会有不足甚至错误的地方,若发现或有什么建议请及时评论提示!


xml.etree.ElementTree模块定义了一个灵活的容器对象Element,用于存储和操作分层数据。

每个element对象都具有以下属性:

    1、tag,string类型,表示数据代表的种类;

    2、attributes,字典类型,表示附有的属性;

    3、text,string类型,表示Element的内容;

    4、tail,string类型,表示Element闭合之后的尾迹

    5、若干子元素

比如:<tag attribute=1>text:content</tag>tail

            1       2              3                         4

初步了解之后我们开始学习下该模块的应用,首先我们来一个xml文件(country_data.xml),类似下面的代码:

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

导入ElementTree:

只需:importxml.etree.ElementTreeasET

若想加快速度,可以使用C语言编译的API xml.etree.cElementTree

所以我们导入时可以这样导入:

try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET

一、创建Element对象

接下来加载数据:

tree = ET.parse("country_data.xml")
root = tree.getroot()

获取到root后,访问一些它的属性:

root.tag  >>>data

root.attrib >>> {}

也可以遍历它的子节点:

for child in root:

    print child.tag,child.attrib

>>>

country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}

我们同样可以根据索引来指定特定的子节点:

root[0][1].text >>> 2008 #我们就获取了根路劲下第一个子节点的第二个子节点的text属性2008

Element还有一些实用的方法可以快速查找:

Element.iter()

    for neighbor in root.iter('neighbor'):
        print neighbor.attrib

    >>>

    {'direction': 'E', 'name': 'Austria'}
    {'direction': 'W', 'name': 'Switzerland'}
    {'direction': 'N', 'name': 'Malaysia'}
    {'direction': 'W', 'name': 'Costa Rica'}
    {'direction': 'E', 'name': 'Colombia'}

Element.findall()查找树结构中匹配给指定路径的所有顶层元素,返回列表或迭代程序

    for country in root.findall("country"):
        print country.find("rank").text
        print country.get("name")

    >>>

    1
    Liechtenstein
    4
    Singapore
    68
    Panama

更多实用函数查看官方文档https://docs.python.org/2/library/xml.etree.elementtree.html#elementtree-xpath

二、创建元素

Comment([text])新建注意元素,就是说映射到xml文件时将创建注释信息;

Element(tag)新建元素,tag为元素的名称,还可以添加属性值,比如要创建"<foo name='test'></foo>"这样的元素,就应Element(‘foo’,{‘name’:‘test’})

SubElement(parent,tag)与Element相似,为新建子元素,parent为父元素,例如:

    a=ET.Element("a")

    b = ET.SubElement(a,"b")

XML(text)通过解析text中的XML节点片段创建元素


该模块功能比较广泛,这里只举出常用的,较简单的一些,详细的文档请跳到https://docs.python.org/2/library/xml.etree.elementtree.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值