#解析一个database的xml文件

"""
<databaselist type="database config">
<database>
<host>localhost</host>
<username>root</username>
<password>11111</password>
<datasename>wulaoshi</datasename>
</database>
</databaselist>
""" #解析xml文件
domtree=parse('d:\\pylianxi\\data.xml') #获取根节点
datalist=domtree.documentElement d={}
#获取标签为database的子节点
database=datalist.getElementsByTagName('database') #database的子节点轮询,过滤掉textNode节点,取出文本值
for i in database[0].childNodes[1::2]:
tag=i.tagName
d[tag]=i.childNodes[0].data #childNodes 获取的是一个列表,通过childNodes[0]获取具体对象 print('database:',d)

2、手动写一个xml文件

#写xml

from xml.dom.minidom import *

#创建一个文档对象
doc=Document() #创建一个根节点
root=doc.createElement('managers') #根节点添加属性
root.setAttribute('company','中体彩')
print(root.getAttribute('company')) #根节点加入到tree
doc.appendChild(root) #创建二级节点
company=doc.createElement('gloryroad')
name=doc.createElement('name')
name.appendChild(doc.createTextNode('公司名称')) #添加文本节点 #创建一个带着文本节点的子节点
ceo=doc.createElement('ceo')
ceo.appendChild(doc.createTextNode('吴总')) #<ceo>吴总</ceo> company.appendChild(name) #name加入到company
company.appendChild(ceo)
root.appendChild(company)#company加入到根节点 print(ceo.tagName) print(doc.toxml()) #存成xml文件
fp=open('d:\\pylianxi\\test.xml','w',encoding='utf-8')
doc.writexml(fp,indent='',addindent='\t',newl='\n',encoding='utf-8')
fp.close()

3、通过字典数据 存成xml文件

from xml.dom.minidom import Document
#在内存中创建一个空的文档
doc = Document() #创建一个根节点Managers对象
root = doc.createElement('Managers') #设置根节点的属性
root.setAttribute('company', '哈哈科技')
root.setAttribute('address', '科技软件园') #将根节点添加到文档对象中
doc.appendChild(root) managerList = [{'name' : 'joy', 'age' : 27, 'sex' : '女'},
{'name' : 'tom', 'age' : 30, 'sex' : '男'},
{'name' : 'ruby', 'age' : 29, 'sex' : '女'} ] for i in managerList :
nodeManager = doc.createElement('Manager')
for j in i: nodeName = doc.createElement(j)
#给叶子节点name设置一个文本节点,用于显示文本内容
nodeName.appendChild(doc.createTextNode(str(i[j]))) #将各叶子节点添加到父节点Manager中,
nodeManager.appendChild(nodeName) #最后将Manager添加到根节点Managers中
root.appendChild(nodeManager) #开始写xml文档
fp = open('d:\\pylianxi\\company11.xml', 'w',encoding='utf-8')
doc.writexml(fp, indent='', addindent='\t', newl='\n', encoding="utf-8")
fp.close()

4、使用etree的方式解析xml文件

#etree xml

from xml.etree import ElementTree as ET

'''
  直接解析XML文件并获得根节点

tree = ET.parse(xmlFilePath)

root = tree.getroot()
  解析字符串

root = ET.fromstring(fp.read())
  '''

tree=ET.ElementTree(file='d:\\pylianxi\\movies.xml')

root=tree.getroot()

#打印根节点的标签及属性字典
print(root.tag)
print(root.attrib) #获取子节点movie的标签及属性字典
for i in root:
print (i.tag)
print ("********", i.attrib) print ("*"*50)
print (root[0].tag)
print (root[0].text) #“打印的内容为一个回车”
print (root[0][0].tag) #第一个movie节点的第一个子标签type
print (root[0][0].text) print ("*"*50)
for i in tree.iter(): #递归遍历所有子元素
print (i.tag, i.attrib,i.text) print ("*"*50)
for elem in tree.iterfind('movie/type'):#或者这种方式./movie/type查找movie下一级节点中的所有type标签,类似xpath查找
print (elem.tag, elem.text) print ("*"*50)
print(list(tree.iter(tag='stars')))
for elem in tree.iter(tag='stars'):#在整个树中查找标签为stars的元素
print (elem.tag, elem.text) print ("*"*50)
for elem in tree.iterfind('*[@title="Ishtar"]'): #或者movie[@title="Ishtar"] 在下一级节点查找属性为title="Ishtar"的元素
print (elem.tag, elem.attrib) print ("-"*50)
root = tree.getroot() #获取第一级movie元素
print ("root:",root[0].tag ) #打印第一级movie元素的标签,为movie
print ("subnode:",root[0][0].tag) #打印第一级movie元素下的第一个子元素标签type
print ("subnode:",root[0][1].tag ) #打印第一级movie元素下的第二个子元素标签format
print ("subnode:",root[0][2].tag ) #打印第一级movie元素下的第三个子元素标签year
print ("subnode:",root[0][3].tag ) #打印第一级movie元素下的第四个子元素标签rating
print ("subnode:",root[0][4].tag ) del root[0][4] #删除第一级movie元素下的第五个子元素
del root[0][3] #删除第一级movie元素下的第四个子元素
del root[0][2] #删除第一级movie元素下的第三个子元素
del root[0][1] #删除第一级movie元素下的第二个子元素 del root[3] #删除第四个movie元素
del root[2] #删除第三个movie元素 for i in root:
print(i.tag,i.attrib)
for j in i:
print('******',j.tag,j.text)
#tree.write("d:\\movies.xml") #将变更的xml文件写入到文件中

5、etree的方式生成xml

#etree 生成一个xml

a = ET.Element('elem')            #生成一个节点elem,没有文本节点
aa = ET.SubElement(a, 'type') #生成一个字节点下的子节点child1
aa.text = "a的type子节点" #在子节点上添加文本节点
aa2 = ET.SubElement(a, 'name') #生成一个字节点下的子节点child2
aa2.text='a的name子节点' b = ET.Element('elem_b') #生成一个节点elem_b,没有文本节点
b.set('company','科技公司')
bb=ET.SubElement(b,'type')
bb.text='bb的type子节点'
bb2=ET.SubElement(b,'name')
bb2.text='bb的name子节点' root = ET.Element('root') #生成一个节点root
root.extend((a, b)) #将a、b两个变量存储的节点elem和elem1添加到root节点下
tree = ET.ElementTree(root) #生成节点树
root[0].set('foo', 'bar') #设定第一个子元素的属性foo,值为bar tree.write("d:\\pylianxi\\test.xml",encoding='utf-8') #将xml文件内容写入到文本文件中,文件格式并不是很漂亮

python xml文件解析 及生成xml文件的更多相关文章

  1. 使用Pull解析器生成XML文件和读取xml文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

  2. 使用Pull解析器生成XML文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

  3. SAX解析和生成XML文档

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ...

  4. maven中使用dom4j解析、生成XML的简易方法

    此片文章主要写一些关于如何在maven工程中使用dom4j来解析或生成XML的建议方法,实际可使用的写法不仅限于如下所写的样例代码.此处进攻快速入手和提供思路使用. 首先配置pom.xml中的依赖的包 ...

  5. 【转载并整理】JAVA解析或生成xml的四种方法

    参考文章 1:http://blog.csdn.net/clemontine/article/details/53011362 2:http://www.jb51.net/article/98456. ...

  6. Dom4j解析、生成Xml

    1以下代码未Xml的解析和生成代码 <?xml version="1.0" encoding="UTF-8"?> <users> < ...

  7. vim保存文件时,生成.un~文件

    在用vim保存文件时,文件夹下生成.un~文件 怎么删除这些文件呢 在网上搜索的答案: http://stackoverflow.com/questions/15660669/what-is-a-un ...

  8. 【Linux开发】【DSP开发】利用CCS6.1生成out文件的同时生成bin文件

    [Linux开发][DSP开发]利用CCS6.1生成out文件的同时生成bin文件 标签:[DSP开发] [Linux开发] 尝试在windows上安装的CCS6.1开发AM4378-Linux下的应 ...

  9. DEX文件解析--6、dex文件字段和方法定义解析

    一.前言    前几篇文章链接:       DEX文件解析---1.dex文件头解析       DEX文件解析---2.Dex文件checksum(校验和)解析       DEX文件解析--3. ...

随机推荐

  1. 【CUDA开发】CUDA开发琐碎知识

    ## 一维矩阵的加 //实现一个一维1*16的小矩阵的加法. //矩阵大小:1*16  //分配一个block,共有16个线程并发.  #include <stdio.h> #includ ...

  2. asp.net编程基础

    vs常用两个快捷键:打开即时窗口 ctrl+alt+i : 快速代码格式排版:ctrl+k+d 一:Page:页面 Page.IsPostBack  判断页面是否第一次加载用 if(Page.IsPo ...

  3. Django 插件之 Xadmin实现富文本编辑器

    此文为前一篇文章的续写: Django 插件之 Xadmin Ueditor 介绍 UEditor 是由百度 web 前端研发部开发所见即所得富文本 web 编辑器,具有轻量,可定制,注重用户体验等特 ...

  4. 捕捉AVPlayerViewController 系统原生工具栏的出现、隐藏事件

    需求前提 1. app内轻量级的视频播放功能,故不希望引入“过度开发.过度封装”的第三方控件组,使用原生的AVPlayerViewController 2. 工具栏有新增控件需求,如下载按钮 等 3. ...

  5. Linux题库练习

    转一个Linux的题库供自己学习使用(滑稽) 转自:http://www.linuxdiyf.com/view_202485.html 选择题1 在终端下输入mount -a命令的作用是:CA 强制进 ...

  6. 小程序里实现 watch 和 computed

    小程序里的自定义组件里是有数据监听器的,可以监听对应数据的变化来执行callBack,但是页面Page里没有对应的api就显的很生硬,比如某个数据变了(如切换城市)需要重新刷页面,如果不做监听,每次都 ...

  7. webpack config to use plugin and webpack-dev-server

    Demo3操作手册 本Demo演示如何配合各种plugin进行偏复杂的使用 准备环境 初始化环境, cd到demo1目录之后, 执行如下命令: npm init -y npm install webp ...

  8. 《Mysql - 读写分离有哪些坑?》

    一:读写分离 - 概念 -  读写分离的主要目标就是分摊主库的压力. - 基本架构 -     -  二:两种读写分离的架构特点 - 客户端直连方案 - 因为少了一层 proxy 转发,所以查询性能稍 ...

  9. Python3之字符串格式化format函数详解(下)

    格式限定符 format通过丰富的的“格式限定符”(语法是 {}中带:号)对需要格式的内容完成更加详细的制定. 进制转换 我们可以再限定符中制定不同的字符对数字进行进制转换的格式化,进制对应的表格: ...

  10. Python程序设计基本方法图

    Python程序设计基本方法图