您的位置:首页 > 移动开发

用ElementTree解析和生成XML

2012-05-22 17:30 405 查看
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字符串

引自:http://blog.csdn.net/likelynn/article/details/1804651
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息