A. Python 怎么解析 xml字符串
1. 我上面这段xml代码,一开始没有注意看,在每一个元素的结尾元素中都含有转义符,这就是为什么我用xml解析插件时一直保报错的原因,因为他不是正规的xml格式。我的方法是用正则替换掉:re.sub(r'(<)\\(/.+?>)',r'\g<1>\g<2>',f_xml) 对于Python中的正则re的sub用法2. 处理成正规的xml格式后,我这里还是用ElementTree来解析的,但在加载时又报错:cElementTree.ParseError: XML or text declaration not at start of entity: line 2, column 0这个错误我在网上没有找到合适的答案,不过根据字面意思来解决,就是在开头的地方有错误。这里我尝试这吧xml的文档声明给去掉了,居然没有报错。这里有些不理解为什么不能加? 我的方法:f_xml=test_xml.replace('<?xml version="1.0" encoding="gbk"?>','')3. 然后再加载,就能获取到相应的节点了。
B. python解析xml文件
可以使用beautifulsoup解析,或者自己使用正则表达式:(import re)
首先获取所有的tr标签内的内容
tr_tags = re.findall(r"<tr>(?P[wW]*?)</tr>", jsp_html_content)
对于每个tr内的标签内容:
for tag in tr_tags:
first_str = re.findall(r"title="(?P[wW]*?)"", tag)[0]
second_str = re.findall(r"encode("(?P[wW]*?)"", tag)[0]
third_str = re.findall(r"%>">(?P[wW]*?)</a>", tag)[0]
此时first_str, second_str, third_str 就对应于【文件中所有的 "文件11", "/file/1文件11.pdf", "文件11" 这三个信息"】
C. 如何使用python解析下面的xml
用elementtree更简单import xml.etree.ElementTree as ETtree = ET.parse("page.xml")root=tree.getroot()print root.attrib["Flag"]
D. 如何用python解析xml文件
<root> <item> <data version="1.0" url="http://***" /> <data version="2.0" url="http://***" /> </item> <other> <data version="1.0" url="http://***" /> <data version="2.0" url="http://***" /> </other> </root>
E. 初学Python求助Python解析xml
python有三种方法解析XML,分别是SAX,DOM,以及ElementTree:
SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
DOM模型将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
Python 解析XML实例:
#!/usr/bin/python#-*-coding:UTF-8-*-importxml.saxclassMovieHandler(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=tagiftag=="movie":print"*****Movie*****"title=attributes["title"]print"Title:",title#元素结束事件处理defendElement(self,tag):ifself.CurrentData=="type":print"Type:",self.typeelifself.CurrentData=="format":print"Format:",self.formatelifself.CurrentData=="year":print"Year:",self.yearelifself.CurrentData=="rating":print"Rating:",self.ratingelifself.CurrentData=="stars":print"Stars:",self.starselifself.CurrentData=="description":print"Description:",self.descriptionself.CurrentData=""#内容事件处理defcharacters(self,content):ifself.CurrentData=="type":self.type=contentelifself.CurrentData=="format":self.format=contentelifself.CurrentData=="year":self.year=contentelifself.CurrentData=="rating":self.rating=contentelifself.CurrentData=="stars":self.stars=contentelifself.CurrentData=="description":self.description=contentif(__name__=="__main__"):#创建一个XMLReaderparser=xml.sax.make_parser()#turnoffnamepsacesparser.setFeature(xml.sax.handler.feature_namespaces,0)#重写ContextHandlerHandler=MovieHandler()parser.setContentHandler(Handler)parser.parse("movies.xml")
F. 如何使用python解析超大XML文档
在工作时最有吸引力的地方在于可以尽量避免使用昔日的技术。主机、租用线路、COBOL语言……没有人应该要处理这些东西了,对不对?不幸的是,你最终会与现实发生冲突,即使是2014年,大家都知道JSON是最好的方式,你的票务供应商(你无法控制的)会告诉你,只有使用XML导出才能让大容量的数据输出他们的系统。唉~~~~,好,很好,无所谓。这只是一次性的事情,我不需要照顾和养活这个XML,我只需要解析它并将数据保存到Postgres中,我们就可以利用它。不应该太困难,我需要写一点python脚本…import xml.etree.cElementTree as ETtree = ET.parse('huge.xml')for ticket_node in tree.findall('ticket'):#etc………这将工作的非常好,如果我们谈论的是一个几MB的XML文档,但是如果遇到的是huge.xml它是1.3GB的巨大文档,这种方法只会融化你的笔记本电脑(以16GB的MacBookPro,一旦python的过程花了超过约3GB的内存,系统变得几乎完全反应迟钝,并且它几乎还没有完成)。回到原点。首先让我们快速浏览一下我们的数据。<?xml version="1.0" encoding="UTF-8"?><tickets report_date="20140217"><ticket><!– various ticket fields, some of which I want –><comments type="array"><comment><!– various comment fields, some of which I want –></comment><!– possibly more comment tags –></comments></ticket><!– many, many ticket tags –></tickets>不是很复杂,作为一个整体它不是一个真正的文件中,<ticket>节点只是一个列表,每一类又是一个小文件,我想挑出几部分出来。我不需要做针对树的任何复杂的遍历,只是希望从每个<ticket>节点获得一些数据然后把它扔掉再读下一个。原来ElementTree的对眼前这个场景提供了一个工具:iterparse()。让我们再试一次:import xml.etree.cElementTree as ETfor event, element in ET.iterparse('huge.xml'):if event == 'end' and element.tag == 'ticket':#process ticket……什么? !我的笔记本电脑又融化了!跟parse-the-whole-file的方法一样使用了完全相同的内存(和系统响应能力)。到底发生了什么事?好吧,稍微google了一下,google告诉我,当iterparse()读取元素时,它仍然是在内存中建立了一个完整的文档树,就像我一开始使用parse()方法一样。几个博客和stackoverflow的答案推荐添加element.clear()方法在循环结束时清理你不需要的对象,可以限制内存消耗。我拯救了你的麻烦:它不工作。其他博客,so的答案,甚至一个IBM白皮书表明需要在循环结束时进行更彻底的清扫工作结束:import lxml.etree as ET #the IBM piece used lxml but I tried cElementTree alsofor event, element in ET.iterparse('huge.xml'):if event == 'end' and element.tag == 'ticket':#process ticket…element.clear()while elem.getprevious() is not None:del elem.getparent()[0]……哎呀!我溶化了另一台笔记本电脑!为什么不工作?坦率地说,我不知道。我稍微离题一下来说说为什么我爱Python。作为一个DBA和系统工程师,我面对着大量的一次性编程挑战。移动这个从这里到那里、Munge数据、将数据从这里迁移到哪里。这种类型的挑战是非常适合于蛮力编程解决问题的这种方式。总之,有时是不值得在建立一个优雅的、易于维护的解决方案上花费任何时间。有时候,你只需要解决这个问题,然后忘掉它。 在处理这类问题上Python最棒的,简洁的语法、良好的设计理念、丰富的库都有助于这个工具,很容易快速解决您碰到的任何问题。即使速度比同等的Java解决方案的10倍还慢,如果需要5分钟的时间写而不是5小时,我更愿意使用python,因为人类工时比CPU工时更有价值。所有这一切都证明下述方式解决了我的问题,而不会融化的笔记本电脑:import xml.etree.cElementTree as ETdef process_buffer(buf):tnode = ET.fromstring(buf)#pull it apart and stick it in the databaseinputbuffer = ''with open('huge.xml','rb') as inputfile:append = Falsefor line in inputfile:if '<ticket>' in line:inputbuffer = lineappend = Trueelif '</ticket>' in line:inputbuffer += lineappend = Falseprocess_buffer(inputbuffer)inputbuffer = Nonedel inputbuffer #probably rendant…elif append:inputbuffer += line不是最优雅,或有效率,或者通用的解决方案,但它可以工作。刚刚看了手边的手册,利用其结构的简单性,在解析之前根据xml文件的内容将它切成可管理的块,然后解析和处理每个块,终于可以确保不再需要更长的时间来把它全部处理完。
G. 用python解析XML格式的字符串
你这样的数据还没有用正则来的简单r'(?<=\<Result\>)(.+?)(?=\</Result\>)'用XML会比较麻烦:dom1 = minidom.parseString(xml)result = dom1.getElementsByTagName("Result")result = result[0].childNodes[0].nodeValue
H. 如何用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 ETexcept 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-8try:import xml.etree.cElementTree as ETexcept ImportError:import xml.etree.ElementTree as ETimport systry:tree = ET.parse("country.xml") #打开xml文档#root = ET.fromstring(country_string) #从字符串传递xmlroot = tree.getroot() #获得root节点except Exception, e:print "Error:cannot parse file:country.xml."sys.exit(1)print root.tag, "—", root.attribfor child in root:print child.tag, "—", child.attribprint "*"*10print root[0][1].text #通过下标访问print root[0].tag, root[0].textprint "*"*10for 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)若有不足,请留言,在此先感谢!
I. python读取xml文件有哪些方法
引入XML组件:import xml.dom.minidom。创建一个xml文件,<?xml version="1.0" encoding="utf-8"?>。相关推荐:《Python教程》加载读取XML文件,xml.dom.minidom.parse('abc.xml'),这是xml文件的对象。获取XML文档对象,root = dom.documentElement。获取标签之间的数据 ,rootdata.getElementsByTagName('caption')。总结一下xml对象,node.getAttribute(AttributeName),获取XML节点属性值,node.getElementsByTagName(TagName),获取XML节点对象集合,等等具体的查看手册。
J. python怎么读取xml
引入XML组件:抄import xml.dom.minidom。创建一个xml文件,<?xml version="1.0" encoding="utf-8"?>。相关推荐:《Python教程》加载读取XML文件,xml.dom.minidom.parse('abc.xml'),这是xml文件的对象。获取XML文档对象,root = dom.documentElement。获取标签之间的数据 ,rootdata.getElementsByTagName('caption')。总结一下xml对象,node.getAttribute(AttributeName),获取XML节点属性值,node.getElementsByTagName(TagName),获取XML节点对象集合,等等具体的查看手册。
未经允许不得转载:山九号 » python解析xml文件|如何用python读取xml文件