pythonxmldom
A. 1、使用python读取依据生成的xml文件,添加样式表,最中生成一个html文件
#coding=utf8
#引入要用到的xml解析库这里我们用比较轻量级的minidom就行了
importxml.dom.minidom
#定义一个html输出模板
#后面我们只是要把这段html中的学生数据部分(<student_trs/>)换成xml中读到的数据
template="""
<html>
<tableborder="1"style="width:100%;text-align:center;">
<tr>
<tdcolspan="4">学生信息</td>
</tr>
<student_trs/>
</table>
</html>
"""
#读取xml文档内容,这里假设是a.xml
dom=xml.dom.minidom.parse('a.xml')
#获取xml中的所有student节点
student_nodes=dom.getElementsByTagName('student')
#初始化student_trs为空
student_trs=""
#遍历每一条学生信息
fornodeinstudent_nodes:
#getAttribute用户获取节点的属性,得到id属性值即学号
#因为xml解析后是Unicode编码的,所以这里要转成utf8编码,下面同理
sid=node.getAttribute("id").encode('utf-8')
#获取所有子节点
children=node.childNodes
forchildinchildren:
#判断子节点的名字为姓名、性别、专业的话,就采集其对应文本
ifchild.nodeName.encode('utf-8')=="姓名":
#使用。childNodes[0].nodeValue的方法得到节点的文本
name=child.childNodes[0].nodeValue.encode('utf-8')
ifchild.nodeName.encode('utf-8')=="性别":
sex=child.childNodes[0].nodeValue.encode('utf-8')
ifchild.nodeName.encode('utf-8')=="专业":
specialty=child.childNodes[0].nodeValue.encode('utf-8')
#组成html中的一行学生数据
student_tr="<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>"%(sid,name,sex,specialty)
#将这一行数据添加到总数据中
student_trs+=student_tr
#替换模板的<student_trs/>为我们上面所得到的html数据
html=template.replace("<student_trs/>",student_trs)
#输入html结果到output.html
open("output.html","w").write(html)
#PS:你提供的xml数据有问题,确实了一个</students>标记
#正确的xml应该如下
"""
<?xmlversion="1.0"encoding="UTF-8"?>
<person>
<students>
<studentid="20140711">
<姓名>三</姓名>
<性别>男</性别>
<专业>计算机</专业>
</student>
</students>
</person>
"""
B. 怎么用python获取xml文件的所有节点。
假如我们有个xml文档如下:example.xml
<?xml version="1.0" encoding="UTF-8"?>
<BIT>
<GeneralDescription>
<name>Matlab</name>
<DateTime>2008-09-10 23:16:48</DateTime>
</GeneralDescription>
<AMatrix>1,2,3;4,5,6;7,8,9</AMatrix>
</BIT>
首先,要解析xml文档,需要导入一个模块
>>> from xml.dom.minidom import parse
(1)然后载入一个xml文档
>>> xmldoc = parse("J:/homeword/example.xml")
>>> print xmldoc.toxml()
<?xml version="1.0" ?>
<BIT>
<GeneralDescription>
<name>Matlab</name>
<DateTime>2008-09-10 23:16:48</DateTime>
</GeneralDescription>
<AMatrix>1,2,3;4,5,6;7,8,9</AMatrix>
</BIT>
>>>
上面是可以查看这个文档的内容。
Toxml方法打印出了node风格的xml,如果节点是Document结果,则打印出整个xml文档。否则只打印出本节点所属内容。
(2)如何获取子节点
>>> xmldoc.childNodes
[<DOM Element: BIT at 0x1223af8>]
>>>
每一个node都有一个childNodes的属性,他是一个node对象的列表,注意的是,一个Document只有一个子节点,上例中就是BIT这个节点,它属于Document节点。
因为是列表,所以也可以同用列表索引,xmldoc.childNodes[0]
>>> BIT_element = xmldoc.firstChild
>>> BIT_element
<DOM Element: BIT at 0x1223af8>
>>> print BIT_element.toxml()
<BIT>
<GeneralDescription>
<name>Matlab</name>
<DateTime>2008-09-10 23:16:48</DateTime>
</GeneralDescription>
<AMatrix>1,2,3;4,5,6;7,8,9</AMatrix>
</BIT>
>>>
(3)获得某一个节点的文本
>>> BIT_element.childNodes
[<DOM Text node "
">, <DOM Element: GeneralDescription at 0x1223be8>, <DOM Text node "
">, <DOM Element: AMatrix at 0x1223e40>, <DOM Text node "
">]
>>>name = (BIT_element.childNodes[1]).childNodes[1]
>>> >>> name.childNodes[0].data
u'Matlab'
>>>
C. python读取xml文件有哪些方法
1、以下几种方法建议初学者使用:
xml.etree.ElementTree
xml.dom
xml.dom.minidom
xml.dom.pulldom
xml.parsers.expat
其中,第一个模块更加轻便简介,对于简单的xml文档,推荐使用
下面的方法涉及知识比较多,熟练掌握上面方法后可以了解使用:
2、Dom读取
3、Dom4j读取
使用dom4j需要导入相关的jar包
import java.io.File;
import java.util.Iterator;
import java.util.List;
4、JDom读取
使用jdom需要导入相关的jar包
import java.io.FileInputStream;
import java.io.InputStream;
5、Sax读取
6、properties的读取
D. 如何用Python创建生成xml文档文件的方法
1、内存数据产生
2、产生xml内存对象(也就是DOM树)
3、产生根对象
4、往根对象里加数据
5、把xml内存对象写到文件
下面是一个创建xml文档的简单实例:
importxml.dom.minidom#在内存中创建一个空的文档doc=xml.dom.minidom.Document()
#创建一个根节点Managers对象root=doc.createElement('Managers')
#设置根节点的属性root.setAttribute('company','xx科技')
root.setAttribute('address','科技软件园')
#将根节点添加到文档对象中doc.appendChild(root)
managerList=[{'name':'joy','age':27,'sex':'女'},
{'name':'tom','age':30,'sex':'男'},
{'name':'ruby','age':29,'sex':'女'}
]foriinmanagerList:
nodeManager=doc.createElement('Manager')
nodeName=doc.createElement('name')
#给叶子节点name设置一个文本节点,用于显示文本内容
nodeName.appendChild(doc.createTextNode(str(i['name'])))
nodeAge=doc.createElement("age")
nodeAge.appendChild(doc.createTextNode(str(i["age"])))
nodeSex=doc.createElement("sex")
nodeSex.appendChild(doc.createTextNode(str(i["sex"])))
#将各叶子节点添加到父节点Manager中,
#最后将Manager添加到根节点Managers中
nodeManager.appendChild(nodeName)
nodeManager.appendChild(nodeAge)
nodeManager.appendChild(nodeSex)
root.appendChild(nodeManager)#开始写xml文档fp=open('c:\wcx\Manager.xml','w')
doc.writexml(fp,indent=' ',addindent=' ',newl=' ',encoding="utf-8")
执行结果:
<?xmlversion="1.0"encoding="utf-8"?>
<Managersaddress="科技软件园"company="xx科技">
<Manager>
<name>joy</name>
<age>27</age>
<sex>女</sex>
</Manager>
<Manager>
<name>tom</name>
<age>30</age>
<sex>男</sex>
</Manager>
<Manager>
<name>ruby</name>
<age>29</age>
<sex>女</sex>
</Manager>
</Managers>
6.用Python自带的写xml文档的API去写,比较方便,后期容易维护。如果直接用打开文件的方式,一行一行的去写,比较费时,也难以维护。
E. python xml.dom.minidom.parse
这个函数不是只打开文件,而是读取整个文件的内容到内存,然后关掉文件。
想释放读取到内存的dom节点,可以调用unlink()函数
示例:
dom1=parse('c:\temp\mydata.xml')
dom1.unlink()
另外,python是有自动内存回收的。如果一个dom节点变量不再被使用,也会自动释放。
F. python2 自带xml.dom.minidom吗
python2.x版本自带xml.dom.minidom
使用 import xml.dom.minidom 导入即可
G. python怎么解析xml文件
python对XML的解析
常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。
python有三种方法解析XML,SAX,DOM,以及ElementTree:
1.SAX (simple API for XML )
python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
2.DOM(Document Object Model)
将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。