关闭

用ElementTree 解析和生成 XML

标签: xmlencodingimportgeneratorapplicationhtml
7616人阅读 评论(0) 收藏 举报
分类:
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字符串
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:87125次
    • 积分:1193
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:2篇
    • 译文:0篇
    • 评论:13条
    文章分类
    最新评论