python - xml.etree

python语言解析xml文件的常用的有两种方式:

    * 通过MiniDom库解析xml文件
    * 通过ElementTree库解析xml文件

使用ElementTree方式解析xml文件比起使用minidom库解析xml文件的,操作要方便的多。 ElementTree属于python标准库的一部分,ElementTree的parse()方法是这个库的主要入口,它使用文件名或流对象作为参数,parse()方法会立即解析完整个文档,它返回的对象是整个文档的对象,而不是根元素,如果要获取根元素,可以调用getroot()方法。

1、插入节点
Element.insert(index, element) 、ET.SubElement(parent, tag[, attrib[, **extra]]) 、Element.append(subelement)
2、删除节点
Element.remove(subelement) 删除一个节点、Element.clear()删除该节点下所有子节点
3、在节点中插入属性
Element.set(key, value)


# -*- coding:UTF-8 -*-

import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom

def getRoot(xmlpath):
    '''
    xmlpath:xml: path to xml file

    '''
    root = ET.parse(xmlpath).getroot()

    return root

def display(root):

    rough_string = ET.tostring(root, 'utf-8')

    reparsed = minidom.parseString(rough_string)

    print reparsed.toprettyxml(indent="  " , encoding="utf-8");


if __name__ == '__main__':

    root = ET.Element('bookList')

 

    bookE = ET.SubElement(root,'book')  #1

    bookE.set('id', 'ISO001')

 

    authorE = ET.Element('author')    #2

    authorE.text = 'Gaosilin'

    bookE.append(authorE)

 

    nameE = ET.Element('name')   #3

    nameE.text = 'java'

    bookE.insert(1,nameE)

    bookE.insert(0,nameE)

    nameE.text = 'C language'

    display(root)


    bookE.remove(nameE)
    bookE.remove(authorE)
    bookE.clear()
    root.remove(bookE)
    display(root)

 

输出结果为:

<?xml version="1.0" encoding="utf-8"?>
<bookList>
  <book id="ISO001">
    <name>
      C language
    </name>
    <author>
      Gaosilin
    </author>
    <name>
      C language
    </name>
  </book>
</bookList>

<?xml version="1.0" encoding="utf-8"?>
<bookList/>

 

 

 

DOM是Document Object Model的简称,它是以对象树来表示一个XML。 

import xml.dom.minidom 

dom = xml.dom.minidom.parse("data.xml")

root = dom.documentElement 

print root.nodeName,root.nodeValue,root.nodeType

对于已经知道元素名字的子元素,可以通过使用getElementsByTagName()方法访问,例:

root.getElementsByTagName("tagname") #读取tagname子元素,返回的结果是一个列表。

如果要得到某元素下的所有子节点,可以使用childNodes属性:

root.childNodes

getElementsByTagName()可以搜索当前元素的所有子元素,包括所有层次的子元素。childNodes只保存了当前元素的第一层子结点。

    for node in doc.getElementsByTagName("tagname"):   

        print (node, node.tagName, node.getAttribute("attributename"))




    

你可能感兴趣的:(xml,python,String,文档,import,encoding)