Python-处理xml

XML

  是实现不同语言或程序之间进行数据交换的协议。格式如下

<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year name="alex">2029</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year name="alex">2032</year>
        <gdppc>59900</gdppc>
        <neighbor direction="N" name="Malaysia" />
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year name="alex">2032</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
    </country>
</data>

  解析xml

from xml.etree import ElementTree as ET

with open("myxml.xml") as f:
    tmp = f.read()

root = ET.XML(tmp)
print(type(root))   #获得Element对象,根元素
#打印:<class 'xml.etree.ElementTree.Element'> 
利用ElementTree.XML将字符串解析成xml对象
from xml.etree import ElementTree as ET

tree = ET.parse("myxml.xml")  # 读取xml文件,获得ElementTree对象
print(type(tree))  # 打印: <class 'xml.etree.ElementTree.ElementTree'>

root = tree.getroot()   #获得xml文件的根元素
利用ElementTree.parse将文件直接解析成xml对象  

  操作xml

属性:
    tag 当前节点的名字
    attrib  当前节点的属性
    text 当前节点的内容(<>这里是内容</>)

方法:
    makeelement(tag,attrib)    #创建一个新节点        
    copy()
    append(subelement)    #为当前节点追加一个子节点
    extend(element)    #为当前节点追加几个节点
    insert(index, subelement)    #为当前节点指定位置添加子节点(相当于创建新节点)
    remove(subelement)    #删除当前节点下的子节点
    find(path)    #获取寻找到的第一个子节点
    findtext(path)    #获取寻找到的第一个子节点的内容
    findall(path)    #获取所有的子节点
    iterfind()    #获取所有指定节点,创建迭代器
    clear()    #清空节点
    get(key, default=None)    #获取当前节点的属性值
    set(key, value)    #设置当前节点的属性值
    keys()    #获取当前节点的所有属性的key
    items()   #获取当前节点的所有属性值(key-value)
    iter()    #获取当前节点下指定的所有节点,返回一个迭代器
    itertext() #获取当前节点下指定的所有节点的内容

  创建xml

from xml.etree import ElementTree as ET

# 创建根节点
root = ET.Element("root")

# 创建子节点,并添加属性
nodes = ET.Element("nodes", {"name": "alex"})
# 创建子节点的子节点,并添加属性
node = ET.Element("node", {"python": "3.5"})

# 为子节点添加节点
nodes.append(node)
# 将子节点添加到根节点下
root.append(nodes)

# 使用根节点创建节点树,并添加xml头
tree = ET.ElementTree(root)
tree.write("tree.xml",xml_declaration=True)
创建方式一
from xml.etree import ElementTree as ET

# 创建根节点
root = ET.Element("famliy")


# 创建大儿子
# son1 = ET.Element('son', {'name': '儿1'})
son1 = root.makeelement('son', {'name': '儿1'})
# 创建小儿子
# son2 = ET.Element('son', {"name": '儿2'})
son2 = root.makeelement('son', {"name": '儿2'})

# 在大儿子中创建两个孙子
# grandson1 = ET.Element('grandson', {'name': '儿11'})
grandson1 = son1.makeelement('grandson', {'name': '儿11'})
# grandson2 = ET.Element('grandson', {'name': '儿12'})
grandson2 = son1.makeelement('grandson', {'name': '儿12'})

son1.append(grandson1)
son1.append(grandson2)


# 把儿子添加到根节点中
root.append(son1)
root.append(son1)

tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False)
创建方式二
from xml.etree import ElementTree as ET


# 创建根节点
root = ET.Element("famliy")


# 创建节点大儿子
son1 = ET.SubElement(root, "son", attrib={'name': '儿1'})
# 创建小儿子
son2 = ET.SubElement(root, "son", attrib={"name": "儿2"})

# 在大儿子中创建一个孙子
grandson1 = ET.SubElement(son1, "age", attrib={'name': '儿11'})
grandson1.text = '孙子'


et = ET.ElementTree(root)  #生成文档对象
et.write("test.xml", encoding="utf-8", xml_declaration=True, short_empty_elements=False)
创建方式三

 

 

 

posted @ 2016-05-27 08:44  阿金study  阅读(96)  评论(0)    收藏  举报