导航:首页 > 数据分析 > xml数据如何使用python

xml数据如何使用python

发布时间:2023-04-21 19:20:47

1. 用python怎么操作xml文件内容

一、什么是xml?
xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
abc.xml

复制代码代码如下:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>

Ok ,从结构上,它很像我们常见的HTML超文本标记语言。但他们被设计的目的是不同的,超文本标记语言被设计用来显示数据,其焦点是数据的外观。它被设计用来传输和存储数据,其焦点是数据的内容。
那么它有如下特征:
首先,它是有标签对组成,<aa></aa>
标签可以有属性:<aa id='123'></aa>
标签对可以嵌入数据:<aa>abc</aa>
标签可以嵌入子标签(具有层级关系):
二、获得标签属性
那么,下面来介绍如何用python来读取这种类型的文件。

复制代码代码如下:

#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
print root.nodeName
print root.nodeValue
print root.nodeType
print root.ELEMENT_NODE

mxl.dom.minidom 模块被用来处理xml文件,所以要先引入。
xml.dom.minidom.parse() 用于打开一个xml文件,并将这个文件对象dom变量。
documentElement 用于得到dom对象的文档元素,并把获得的对象给root
每一个结点都有它的nodeName,nodeValue,nodeType属性。
nodeName为结点名字。
nodeValue是结点的值,只对文本结点有效。
nodeType是结点的类型。catalog是ELEMENT_NODE类型
现在有以下几种:
'ATTRIBUTE_NODE'
'CDATA_SECTION_NODE'
'COMMENT_NODE'
'DOCUMENT_FRAGMENT_NODE'
'DOCUMENT_NODE'
'DOCUMENT_TYPE_NODE'
'ELEMENT_NODE'
'ENTITY_NODE'
'ENTITY_REFERENCE_NODE'
'NOTATION_NODE'
'PROCESSING_INSTRUCTION_NODE'
'TEXT_NODE'

三、获得子标签
现在要获得catalog的子标签以的标签name

复制代码代码如下:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>

对于知道元素名字的子元素,可以使用getElementsByTagName方法获取:

复制代码代码如下:

#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
bb = root.getElementsByTagName('maxid')
b= bb[0]
print b.nodeName
bb = root.getElementsByTagName('login')
b= bb[0]
print b.nodeName

如何区分相同标签名字的标签:

复制代码代码如下:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>

<caption>和<item>标签不止一个如何区分?
复制代码代码如下:

#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
bb = root.getElementsByTagName('caption')
b= bb[2]
print b.nodeName
bb = root.getElementsByTagName('item')
b= bb[1]
print b.nodeName

root.getElementsByTagName('caption') 获得的是标签为caption 一组标签,b[0]表示一组标签中的第一个;b[2] ,表示这一组标签中的第三个。
四、获得标签属性值

复制代码代码如下:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>

<login>和<item>标签是有属性的,如何获得他们的属性?
复制代码代码如下:

#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
itemlist = root.getElementsByTagName('login')
item = itemlist[0]
un=item.getAttribute("username")
print un
pd=item.getAttribute("passwd")
print pd
ii = root.getElementsByTagName('item')
i1 = ii[0]
i=i1.getAttribute("id")
print i
i2 = ii[1]
i=i2.getAttribute("id")
print i

getAttribute方法可以获得元素的属性所对应的值。
五、获得标签对之间的数据
复制代码代码如下:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>

<caption>标签对之间是有数据的,如何获得这些数据?
获得标签对之间的数据有多种方法,
方法一:

复制代码代码如下:

#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
cc=dom.getElementsByTagName('caption')
c1=cc[0]
print c1.firstChild.data
c2=cc[1]
print c2.firstChild.data
c3=cc[2]
print c3.firstChild.data

firstChild 属性返回被选节点的第一个子节点,.data表示获取该节点人数据。
方法二:

复制代码代码如下:

#coding=utf-8
from xml.etree import ElementTree as ET
per=ET.parse('abc.xml')
p=per.findall('./login/item')
for oneper in p:
for child in oneper.getchildren():
print child.tag,':',child.text

p=per.findall('./item')
for oneper in p:
for child in oneper.getchildren():
print child.tag,':',child.text

方法二有点复杂,所引用模块也与前面的不一样,findall用于指定在哪一级标签下开始遍历。
getchildren方法按照文档顺序返回所有子标签。并输出标签名(child.tag)和标签的数据(child.text)
其实,方法二的作用不在于此,它核心功能是可以遍历某一级标签下的所有子标签。

2. 如何用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去写,比较方便,后期容易维护。如果直接用打开文件的方式,一行一行的去写,比较费时,也难以维护。

3. 如何使用python生成xml

最近要用python生成一个xml格式的文件。因为有一些内容是中文,原来的xml文件中使用了CDATA 的部分。 而之前的python程序所用的库中没有 创建这个区域的方法。无奈研究了大半天。 最后用了 from lxml import etree 这个库的方法。 这里将可运行的 python程序分享出来。 供大家参考。 经过测试,这段代码是可以直接运行生成xml格式内容的。

1 # -*- coding:utf-8 -*-
2 import sys
3 import time
4 import string
5
6 from lxml import etree
7
8
9 #设置默认字符集为UTF8 不然有些时候转码会出问题
10 default_encoding = 'utf-8'
11 if sys.getdefaultencoding() != default_encoding:
12 reload(sys)
13 sys.setdefaultencoding(default_encoding)
14
15 def create_xml():
16
17 data = etree.Element("data")
18 #1 interface_version
19 interface_version_txt = '5'
20 interface_version = etree.SubElement(data, 'interface_version')
21 interface_version.text = interface_version_txt
22 #2 site
23 site_txt = 'www.xxx.com'
24 site = etree.SubElement(data, 'site')
25 site.text = site_txt
26 #3 lastmod
27 lastmod_txt = time.strftime('%Y-%m-%d', time.localtime())
28 lastmod = etree.SubElement(data, 'lastmod')
29 lastmod.text = lastmod_txt
30 #5 app
31 app = etree.SubElement(data, 'app')
32 #6 title
33 title_txt = u'%s' % '真心话大冒险'
34 title_txt = etree.CDATA(title_txt)
35 title = etree.SubElement(app, 'title')
36 title.text = title_txt
37 #7 appid
38 appid = etree.SubElement(app, 'appid')
39 appid.text = '%s' % '222'
40
41 dataxml = etree.tostring(data, pretty_print=True, encoding="UTF-8", method="xml", xml_declaration=True, standalone=None)
42 print dataxml
43
44
47 if __name__ == '__main__':
48 create_xml()

4. 如何用python读取xml文件

一、简介

XML(eXtensible Markup Language)指可扩展标记语言,被设计用来传输和存储数据,已经日趋成为当前许多新生技术的核心,在不同的领域都有着不同的应用。它是web发展到一定阶段的必然产物,既具有SGML的核心特征,又有着HTML的简单特性,还具有明确和结构良好等许多新的特性。
python解析XML常见的有三种方法:一是xml.dom.*模块,它是W3C DOM API的实现,若需要处理DOM API则该模块很适合,注意xml.dom包里面有许多模块,须区分它们间的不同;二是xml.sax.*模块,它是SAX API的实现,这个模块牺牲了便捷性来换取速度和内存占用,SAX是一个基于事件的API,这就意味着它可以“在空中”处理庞大数量的的文档,不用完全加载进内存;三是xml.etree.ElementTree模块(简称 ET),它提供了轻量级的Python式的API,相对于DOM来说ET 快了很多,而且有很多令人愉悦的API可以使用,相对于SAX来说ET的ET.iterparse也提供了 “在空中” 的处理方式,没有必要加载整个文档到内存,ET的性能的平均值和SAX差不多,但是API的效率更高一点而且使用起来很方便。
二、详解

解析的xml文件(country.xml):
在CODE上查看代码片派生到我的代码片

<?xml version="1.0"?>
<data>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>


1、xml.etree.ElementTree

ElementTree生来就是为了处理XML,它在Python标准库中有两种实现:一种是纯Python实现的,如xml.etree.ElementTree,另一种是速度快一点的xml.etree.cElementTree。注意:尽量使用C语言实现的那种,因为它速度更快,而且消耗的内存更少。
在CODE上查看代码片派生到我的代码片

try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET


这是一个让Python不同的库使用相同API的一个比较常用的办法,而从Python 3.3开始ElementTree模块会自动寻找可用的C库来加快速度,所以只需要import xml.etree.ElementTree就可以了。
在CODE上查看代码片派生到我的代码片

#!/usr/bin/evn python
#coding:utf-8

try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
import sys

try:
tree = ET.parse("country.xml") #打开xml文档
#root = ET.fromstring(country_string) #从字符串传递xml
root = tree.getroot() #获得root节点
except Exception, e:
print "Error:cannot parse file:country.xml."
sys.exit(1)
print root.tag, "---", root.attrib
for child in root:
print child.tag, "---", child.attrib

print "*"*10
print root[0][1].text #通过下标访问
print root[0].tag, root[0].text
print "*"*10

for country in root.findall('country'): #找到root节点下的所有country节点
rank = country.find('rank').text #子节点下节点rank的值
name = country.get('name') #子节点下属性name的值
print name, rank

#修改xml文件
for country in root.findall('country'):
rank = int(country.find('rank').text)
if rank > 50:
root.remove(country)

tree.write('output.xml')


运行结果:

三、总结
(1)Python中XML解析可用的类库或模块有xml、libxml2 、lxml 、xpath等,需要深入了解的还需参考相应的文档。
(2)每一种解析方式都有自己的优点和缺点,选择前可以综合各个方面的性能考虑。
(3)若有不足,请留言,在此先感谢!

5. 初学Python求助Python解析xml

python有三种方法解析XML,分别是SAX,DOM,以及ElementTree:

  1. SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

  2. DOM模型将XML数据在内存中解析成一个树,通过对树的操作来操作XML。

  3. ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

Python 解析XML实例:

#!/usr/bin/python
#-*-coding:UTF-8-*-

importxml.sax

classMovieHandler(xml.sax.ContentHandler):
def__init__(self):
self.CurrentData=""
self.type=""
self.format=""
self.year=""
self.rating=""
self.stars=""
self.description=""

#元素开始事件处理
defstartElement(self,tag,attributes):
self.CurrentData=tag
iftag=="movie":
print"*****Movie*****"
title=attributes["title"]
print"Title:",title

#元素结束事件处理
defendElement(self,tag):
ifself.CurrentData=="type":
print"Type:",self.type
elifself.CurrentData=="format":
print"Format:",self.format
elifself.CurrentData=="year":
print"Year:",self.year
elifself.CurrentData=="rating":
print"Rating:",self.rating
elifself.CurrentData=="stars":
print"Stars:",self.stars
elifself.CurrentData=="description":
print"Description:",self.description
self.CurrentData=""

#内容事件处理
defcharacters(self,content):
ifself.CurrentData=="type":
self.type=content
elifself.CurrentData=="format":
self.format=content
elifself.CurrentData=="year":
self.year=content
elifself.CurrentData=="rating":
self.rating=content
elifself.CurrentData=="stars":
self.stars=content
elifself.CurrentData=="description":
self.description=content

if(__name__=="__main__"):

#创建一个XMLReader
parser=xml.sax.make_parser()
#turnoffnamepsaces
parser.setFeature(xml.sax.handler.feature_namespaces,0)

#重写ContextHandler
Handler=MovieHandler()
parser.setContentHandler(Handler)

parser.parse("movies.xml")

6. python读取xml文件有哪些方法

1、以下几种方法建议初学者使用:

下面的方法涉及知识比较多,熟练掌握上面方法后可以了解使用:

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的读取

阅读全文

与xml数据如何使用python相关的资料

热点内容
bat脚本移动文件 浏览:311
proe装好了没有配置文件 浏览:734
苹果id未激活怎么办啊 浏览:381
怎样安装腾讯qq斗地主 浏览:127
外网共享文件夹 浏览:787
文件的提取码如何使用 浏览:720
qq看资料主页留足迹 浏览:42
网页视频如何保存到文件夹里 浏览:634
核桃编程打开就蓝屏怎么回事 浏览:843
win10什么时候旗舰版 浏览:210
在日本找房子用哪个App好用 浏览:242
linux命令行下执行python脚本 浏览:935
文摘索引数据库 浏览:712
网络红娘下载 浏览:686
如何对发送的文件修改 浏览:464
如何更改文件编辑器 浏览:91
怎么把图片以图片形式放进文件夹 浏览:833
asp淘宝网站源码 浏览:318
怎么给文件夹换个显示图片 浏览:932
程序员考试河南 浏览:284

友情链接