xml基础(一)

xml是用来结构化传输和存储数据的。

元素:

xml元素是从(且包括)开始标签直到(且包括)结束标签的部分

例如:下面这个就是一个元素,

  book是这个元素的名称。category是元素的属性,后面跟的是属性的内容,属性的内容必须用双引号引起来。

  title也是一个元素,只不过是book的子元素。Harry Potter是这个元素的文本内容(text)

<book category="CHILDREN">
        <title>Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>

 

xml必须有且只有一个根元素,上面例子的book就是根元素。下面的title、author等就是子元素。

xml是大小写敏感的。book和Book是不同的。

那么对应的Python中有个xml处理库,xml处理库下面有这些子模块:

里面有几种不同解析xml文件的思路:

ElementTree是将xml文件抽象成一棵树,是一个轻量级的dom,具有方便友好的API。代码可用性好,速度快,消耗内存少。

dom是将 XML 文档作为一个树形结构,而树叶被定义为节点,通过对树的操作来操作XML。

SAX 用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

 

 

那么先看这个ElementTree吧。。。。

有两个类: ElementTree 将整个XML文档表示为一个树, Element 表示该树中的单个节点。与整个文档的交互(读写文件)通常在 ElementTree 级别完成。与单个XML元素及其子元素的交互是在 Element 级别完成的。

先说这个Element,

Element(tagattrib={}**extra)

tag

一个标识此元素,意味着何种数据的字符串(换句话说,元素类型或叫名称)。

attrib

是该元素的属性,是可选的,属性使用字典格式来定义。

extra包含额外的属性,作为关键字参数提供

新建一个Element:

import xml.etree.ElementTree as ET
ele=ET.Element(tag)
#添加属性
ele.attrib={"attrib_name":attrib}
#添加内容
ele.text=text

下面是方法:

ele.clear() 

该函数删除所有子元素,清除所有属性,并将文本和尾部属性设置为None。

ele.get(keydefault=None)

获取名为key的元素属性,返回属性值,如果没有找到属性,则返回默认值

ele.items()

以(名称、值)对序列的形式返回元素属性。属性以任意顺序返回。

ele.keys()

以列表(list)的形式返回元素属性名。名称以任意顺序返回。

ele.set(keyvalue)

将元素的属性key设置为value。也可以用它来增加属性

ele.append(subelement)

将元素子元素(subelement)添加到该元素的内部子元素列表的末尾。如果子元素不是元素,则引发类型错误。

ele.extend(subelements)

用零个或多个元素追加序列对象的子元素。如果子元素不是元素,则引发类型错误。

ele.find(matchnamespaces=None)

查找第一个匹配的子元素。匹配可以是标记名(tag)或路径(path)。返回一个元素实例或一个也不返回。

ele.findall(matchnamespaces=None)

根据标记名或路径查找所有匹配的子元素。返回一个按文档顺序包含所有匹配元素的列表

ele.findtext(matchdefault=Nonenamespaces=None)

查找第一个匹配的子元素的文本。匹配可以是标记名或路径。返回第一个匹配元素的文本内容,如果没有找到元素,则返回默认值。

ele.insert(indexsubelement)

在元素中给定的位置插入子元素。如果子元素不是元素,则引发类型错误。

ele.iter(tag=None)

创建一个以当前元素为根的树迭代器。迭代器按文档(深度优先)顺序遍历这个元素和它下面的所有元素。如果tag不是None或'*',则迭代器只返回标记等于tag的元素。如果在迭代期间修改了树结构,则结果是未定义的。

ele.iterfind(matchnamespaces=None)

根据标记名或路径查找所有匹配的子元素。返回一个可迭代的,以文档顺序产生所有匹配的元素。名称空间是从名称空间前缀到全名的可选映射

ele.itertext()

创建文本迭代器。迭代器按文档顺序遍历此元素和所有子元素,并返回所有内部文本

remove(subelement)

从元素中移除子元素。与find*方法不同,此方法基于实例标识(而不是基于标记值或内容)对元素进行比较

 

posted on 2019-10-26 11:40  龙贝勒  阅读(220)  评论(0编辑  收藏  举报