python解析xml文件,获取标签内内容

月白清风 2011-03-03 11:18:36
xml文件片段示例如下:
<title>Test</title>
<s>1298888532</s>
<suite title="suite1" id="">
<s>1298888532</s>
<case title="case1" id="0011">
<s>1298888532</s>
<step title="step1">
<s>1298888532</s>
。。。内容
<f>1298888534</f>
</step>
<suite title="suite1" id="">
<s>1298888532</s>
<case title="case1" id="0011">
<s>1298888532</s>
<step title="step1">
<s>1298888532</s>

说明:只有一个<title>,一个<title>可能有多个<suite>,一个<suite>中可能有多个<case>,一个<case>间可能有多个<step>,每个下面紧跟着的<s>1298888532</s>和与之对应的<f>1298888532</f>中的数字为我要获取的内容。如果指定了suite的title如为suite1<suite title="suite1" id="">则获取指定的s、f对,没指定获取全部的(case、step同样如此)。
新手第一次发帖、第一次搞python,期待大牛们的指点
...全文
2252 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
已经注册 2011-05-18
  • 打赏
  • 举报
回复
'''随便写个,你可以根据需要自己再改改,增加一些自己要的方法'''
from xml.etree.ElementTree import ElementTree as ET
class ParseXML():
_tree=None
def __init__(self,xmlfile):
self._tree = ET()
self._tree.parse(xmlfile)


#根据路径,属性名称获取属性值集
def findAll(self,path,attrName):
elemList = self._tree.findall(path)
rlt =[]
for element in elemList:
#assert iselement(element)
rlt.append(element.get(attrName))
return rlt
#查找某个属性是否存在
def isExist(self,path,key,value):
elemList = self._tree.findall(path)
for element in elemList:
if element.get(key)==value:
return True
return False

if __name__=="__main__":
xml=r"C:\Python25\workspace\cfg.xml"
pp = ParseXML(xml)
print pp.findAll("TABLE/PARA/","srcname")
print pp.isExist("TABLE/PARA/","srcname",'xxx')
不得闲 2011-03-26
  • 打赏
  • 举报
回复
可以用lxml来解析,这个很简单!
CJljfn 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 is0501xql 的回复:]

from xml.dom import minidom
可以遍历每个节点

http://docs.python.org/library/xml.dom.minidom.html
[/Quote]

+1 自己试下,标准格式的解析起来 很方便
lengxujun 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lgxwqq111 的回复:]
用正则表达式也可以的,把标签全部替换空格,然后用字符串的strip方法
[/Quote]

+1
freetstar 2011-03-22
  • 打赏
  • 举报
回复
用正则表达式也可以的,把标签全部替换空格,然后用字符串的strip方法
is0501xql 2011-03-12
  • 打赏
  • 举报
回复
from xml.dom import minidom
可以遍历每个节点

http://docs.python.org/library/xml.dom.minidom.html
月白清风 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 b_big_small 的回复:]

Beautiful_Soup
[/Quote]
看了一下Beautiful_Soup很强大,但是处理xml就需要BeautifulStoneSoup,关于这个没有那么多的介绍
月白清风 2011-03-08
  • 打赏
  • 举报
回复
能具体点吗?python我很菜的
b_big_small 2011-03-07
  • 打赏
  • 举报
回复
Beautiful_Soup
iambic 2011-03-03
  • 打赏
  • 举报
回复
你所有的s都是1298888532,不知道你想怎么获取,全部都获取吗?另外你提问题尽量把问题提准确。把你的XML完整的贴出来,对应的具体输入,你期望的输出是什么。多举几组输入输出。把问题准确描述了,节省别人猜测和沟通的时间。
iambic 2011-03-03
  • 打赏
  • 举报
回复
贴XML的时候格式化下。没缩进看着乱七八糟的。
月白清风 2011-03-03
  • 打赏
  • 举报
回复
有点问题,没想好。假设多个suite里面的case的title有重复怎么办?输入参数是三个,xml文件、标签类型(<title>、<suite>、<case>、<step>)、title(可空,空则返回全部标签类型的s、f对)
iambic 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 peakcxy 的回复:
数字是1970到现在的秒数。我想取出时间来做进一步处理。
三个参数:xml文件、标签类型(需要制定)、标签名。如果标签名存在,则在xml文件中查找给定标签名的标签类型的时间。如果标签名不存在,则在xml文件中查找所有制定标签类型的开始<s>、结束时间<f>。
[/Quote]
就你贴的XML,贴具体的输入和输出。你的描述很官腔,看起来表述了些东西,其实很空洞,完全没有可行性。
月白清风 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 iambic 的回复:]

贴完了你倒是自己看下啊。贴出来的一堆减号,根本不是合法XML,还没缩进,你这样贴不是敷衍了事吗。
[/Quote]
我是想读取文本的xml文件。就是把所有这些读进来处理。你的意思是?
另外我不知道怎么贴xml源码
iambic 2011-03-03
  • 打赏
  • 举报
回复
贴完了你倒是自己看下啊。贴出来的一堆减号,根本不是合法XML,还没缩进,你这样贴不是敷衍了事吗。
月白清风 2011-03-03
  • 打赏
  • 举报
回复

<?xml version="1.0" encoding="GB2312" ?>
- <report>
<schemaversion>2.0.0</schemaversion>
<owner>author</owner>
<title>Test</title>
<s>1298888532</s>
- <suite title="No Title" id="">
<s>1298888532</s>
- <case title="0001_single_case" id="0011">
<s>1298888532</s>
- <step title="step1">
<s>1298888532</s>
<e title="value1" type="text/plain">MA==</e>
<a title="value1" type="text/plain">MA==</a>
<more title="更多信息..." type="text/plain">Y2xpY2sgaGVyZQ==</more>
<f>1298888534</f>
</step>
- <step title="step2">
<s>1298888534</s>
<e title="value2" type="text/plain">MA==</e>
<a title="value2" type="text/plain">LTE=</a>
<more title="更多信息..." type="text/plain">Y2xpY2sgaGVyZQ==</more>
<f>1298888537</f>
</step>
- <step title="step3">
<s>1298888537</s>
<e title="value3" type="text/plain">MA==</e>
<a title="value3" type="text/plain">MA==</a>
<more title="更多信息..." type="text/plain">Y2xpY2sgaGVyZQ==</more>
<f>1298888539</f>
</step>
<f>1298888539</f>
</case>
<f>1298888539</f>
</suite>
<f>1298888539</f>
</report>
月白清风 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iambic 的回复:]

你所有的s都是1298888532,不知道你想怎么获取,全部都获取吗?另外你提问题尽量把问题提准确。把你的XML完整的贴出来,对应的具体输入,你期望的输出是什么。多举几组输入输出。把问题准确描述了,节省别人猜测和沟通的时间。
[/Quote]

数字是1970到现在的秒数。我想取出时间来做进一步处理。
三个参数:xml文件、标签类型(需要制定)、标签名。如果标签名存在,则在xml文件中查找给定标签名的标签类型的时间。如果标签名不存在,则在xml文件中查找所有制定标签类型的开始<s>、结束时间<f>。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧