用ElementTree 解析和生成 XML

from elementtree import ElementTree
from elementtree.ElementTree import Element

##解析方案一: 解析XML字符串,入參是字符串
fp = open('test.xml', 'r')
content = fp.read()
fp.close()

content = content.decode('gb2312').encode('UTF-8')
content = content.replace('encoding="gb2312"', 'encoding="UTF-8"')
print content

root = ElementTree.fromstring(content)

##解析方案二: 解析一個XML文件,入參是文件名
import elementtree.ElementTree as ET
root = ET.Element("html")

##獲取節點
##獲取同名節點列表
root.findall('NodeName') ##這是第一層節點
root.findall('/NodeName/SubNode') ##也可以寫路徑來獲取底下幾層的節點
##也可以這麼獲取多層的節點
ElementTree.Element = root.findall('NodeName')
ElementTree.Element[0].findall('SubNode')
##獲取後的節點可以用個iter來保存,也可以直接就用 ElementTree.Element來獲取


##獲取單個節點,如果有同名的返回第一個節點
root.find('NodeName') ##這是第一層節點
root.find('/NodeName/SubNode') ##也可以寫路徑來獲取底下幾層的節點
##也可以這麼獲取多層的節點
ElementTree.Element = root.find('NodeName')
ElementTree.Element.find('SubNode')


##獲得和修改屬性
##根節點
print root.get("Name")
root.set("Name", "aaaa")##修改根節點中名爲Name的屬性值爲"aaaa"
print root.get("Name")

##子節點
ElementTree.Element = root.findall('node')
print ElementTree.Element[2].get("name")
ElementTree.Element[2].set("name","kkk")
print ElementTree.Element[2].get("name")


##寫XML
##將root存儲爲XML字符串,這是寫XML的方法之一,前提是得先由一個XML解析出root
print ElementTree.tostring(root, encoding='gb2312')

##寫XML方法之二,構造XML,從空白開始
from elementtree.SimpleXMLWriter import XMLWriter
import sys
##XMLWriter(file,encoding='')參數是:文件名,文件編碼類型
w = XMLWriter("TEST.XML",, encoding='gb2312')
w.declaration(encoding='gb2312') ##添加XML頭,即<?xml version="1.0" encoding="gb2312"?>
xmlstr = w.start("html") ##這邊的變量不能定義爲 xml
w.start("head") ##根節點 <head>
w.element("title", "my document")
w.element("meta", name="generator", value="my application 1.0") ##這是個有屬性的節點,生成之後爲<meta name=name="generator" value="my application 1.0">
w.end() ##一段節點的結束,下一個w.start()追加的是和本次w.start()同級的節點
w.start("body")
w.element("h1", "this is a heading")
w.element("p", "this is a paragraph")
w.start("p")
w.data("this is ")
w.element("b", "bold")
w.data(" and ")
w.element("i", "italic")
w.data(".")
w.end("p")
w.close(xmlstr)

##以上是將生成的XML寫到文件中,如果是想寫到一個字符串中則需要使用以下代碼
from cStringIO import StringIO
out = StringIO()
w = XMLWriter(out, encoding='gb2312')
##……中間相同
w.close(xmlstr)
ss = out.getvalue() ##用這句來獲得整個XML字符串
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章