用ElementTree 解析和生成 XML
2007-09-28 11:13
281 查看
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字符串
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字符串
相关文章推荐
- python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
- python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
- 用ElementTree解析和生成XML
- python网络编程学习笔记(8):XML生成与解析(DOM、ElementTree)
- 解析xml和生成xml(使用dom4j和velocity)
- php实现解析xml并生成sql语句的方法
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
- 【Android技术整理】XML生成与解析伪代码
- xml解析与xml的生成
- Sun公司的jaxp解析中的DOM解析与生成XML
- 对xsd文件的操作 生成java实体并解析生成的xml
- 第一天:主要实现解析xml文件和生成xml文件
- ZH奶酪:Python使用ElementTree解析XML【译】
- DOM4J生成和解析XML文档
- 【java】struts和ajax的小例子②→js解析生成的xml
- 【Android网络开发の1】XML之DOM方式 解析和生成XML文件 推荐
- Android提高第七篇之XML解析与生成
- C#XML生成与解析
- 解析数据库生成XML文件及解析XML文件插入数据库
- XML的解析与生成