python—xml读写—minidom and etree
2014-05-02 01:25
435 查看
test.xml
1. minidom
输出结果:
write.xml:
2. etree
输出结果:
update.xml:
用SubElement好像没法换行?
<?xml version="1.0" encoding="UTF-8"?> <employees> <employee id="0"> <name>Liu</name> <age>30</age> </employee> <employee id="1"> <name>John</name> <age>20</age> </employee> </employees>
1. minidom
from xml.dom import minidom from codecs import open if __name__ == '__main__': #用xml.dom.minidom读xml doc=minidom.parse('test.xml') root=doc.documentElement #得到根节点——employees employees=root.getElementsByTagName('employee') #根据名字来查找子elements for employee in employees: print ("id:"+employee.getAttribute('id')) #获得属性值 name=employee.getElementsByTagName('name')[0] #childNodes返回所有的子Nodes,其中所有的文本均为textNode,包括元素间的‘\n\r’和空格均 print(name.nodeName+":"+name.childNodes[0].nodeValue) #nodeValue是结点的值,只对textNode有效 age=employee.getElementsByTagName('age')[0] print(age.nodeName+":"+age.childNodes[0].data) #对于textNode,得到文本内容也可以使用.data #用xml.dom.minidom写xml impl=minidom.getDOMImplementation() doc=impl.createDocument(None, 'employees', None) #创建根节点——employees root=doc.documentElement employee=doc.createElement('employee') #创建employee节点 employee.setAttribute('id', '0') #设置id属性 root.appendChild(employee) namenode=doc.createElement('name') #创建name节点 nametext=doc.createTextNode('刘') #创建textnode namenode.appendChild(nametext) employee.appendChild(namenode) agenode=doc.createElement('age') agetext=doc.createTextNode('30') agenode.appendChild(agetext) employee.appendChild(agenode) f=open('write.xml','w',encoding='utf-8') #addindent表示子元素缩进,newl='\n'表示元素间换行,encoding='utf-8'表示生成的xml的编码格式(<?xml version="1.0" encoding="utf-8"?>) doc.writexml(f, addindent=' ', newl='\n', encoding='utf-8')
输出结果:
id:0 name:Liu age:30 id:1 name:John age:20
write.xml:
<?xml version="1.0" encoding="utf-8"?> <employees> <employee id="0"> <name>刘</name> <age>30</age> </employee> </employees>
2. etree
from xml.etree import ElementTree #打印节点信息 def print_node(node): print "-------------------------------" print "attrib:%s" %node.attrib #属性的字典 print "id:%s" %node.attrib['id'] #指定的属性值 for key,value in node.items(): #items:属性(name, value)对儿 print "%s:%s" %(key,value) for child in node: print "tag:%s" %child.tag print "text:%s" %child.text #读xml def readxml(text='',xmlfile=''): #root=ElementTree.parse('test.xml').getroot() #加载指定文件获得根节点 root=ElementTree.fromstring(text) #加载指定字符串获得根节点 employees=root.iter('employee') #通过iter(tag=None)获取element for employee in employees: print_node(employee) for employee in root.findall('employee'): #findall:匹配的直接子节点 print "-------------------------------" age=employee.find('age').text #find:第一个匹配的 id=employee.get('id') #得到属性值 print age,id #更改xml def updatexml(text='',xmlfile=''): tree=ElementTree.parse(xmlfile) #加载指定文件 root=tree.getroot() #获得根节点 for age in root.iter('age'): #获得所有age节点 newage=int(age.text)+1 age.text=str(newage) age.set('updated','yes') #设置属性-值 name=root[0].find('name') root[0].remove(name) #移除节点 #创建节点 employee=ElementTree.Element('employee',{'id':'99'}) #Element(tag, attrib={}, **extra) name=ElementTree.SubElement(employee, 'name') #SubElement(parent, tag, attrib={}, **extra) name.text='新' age=ElementTree.SubElement(employee,'age') age.text='99' root.append(employee) #write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None, method="xml") tree.write('updated.xml',encoding='utf-8') if __name__ == '__main__': readxml(open('test.xml').read()) updatexml('','test.xml')
输出结果:
------------------------------- attrib:{'id': '0'} id:0 id:0 tag:name text:Liu tag:age text:30 ------------------------------- attrib:{'id': '1'} id:1 id:1 tag:name text:John tag:age text:20 ------------------------------- 30 0 ------------------------------- 20 1
update.xml:
<employees> <employee id="0"> <age updated="yes">31</age> </employee> <employee id="1"> <name>John</name> <age updated="yes">21</age> </employee> <employee id="99"><name>新</name><age>99</age></employee></employees>
用SubElement好像没法换行?
相关文章推荐
- Python使用minidom读写xml的方法
- python类库31[使用minidom读写xml]
- python类库[使用xml.etree.ElementTree读写xml]
- python3.2 读写 xml( xml.etree.ElementTree,xml.dom )
- Python 使用minidom读写xml
- Python使用minidom读写xml的方法
- python使用minidom读写xml
- python类库31[使用xml.etree.ElementTree读写xml]
- python类库31[使用minidom读写xml]
- python类库31[使用minidom读写xml]
- python类库31[使用xml.etree.ElementTree读写xml]
- python 标准库之xml.etree.ElementTree
- python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用
- python开发_xml.etree.ElementTree_XML文件操作
- python读写xml
- Python xml属性/节点/文本的增删改[xml.etree.ElementTree]
- Python 快捷读写XML的方式
- Python 标准库之 xml.etree.ElementTree
- Python xml.etree.ElementTree解析XML文件实例演示(十六02)
- Python标准库之xml.etree.ElementTree