Python ElementTree的find,findall函数参数
来源:互联网 发布:数据库怎么弄 编辑:程序博客网 时间:2024/05/19 00:38
这两天学习如何使用微软的一个API,用python写了接口代码使用HTTP方法测试,HTTP的API的最后返回是一个XML文件,翻了翻,看见python的xml的ElementTree这套接口的API看起来比较对胃口,于是使用了一下ElementTree进行解析
但死活用find,和findall两个函数接口服务无法得到希望的tag,百思不得其借,
Python的docamention上面对这两个函数,解释非常简单。
- find(match)
Finds the first subelement matching match. match may be a tag name or path. Returns an element instance orNone.
回家找了一下《Python Essential Reference》国内翻译《Python参考手册》,手册的解释太简单,其参数match含义其实挺复杂的。
其有tag,* .//tag,tag1/tag2,*/tag等不同的用法,文档上根本没有说明白。不知道是不是因为ElementTree 是一个外家的孩子,在本家不受待见还是因为是effbot自己提交的文档,文档写的马虎了。
有兴趣的去 http://effbot.org/zone/element.htm 翻翻,比docamention 上面讲的清楚明白一些。
废话不多说,用代码解释这两个函数。
xml_str="""<a> <b>1</b> <b>2</b> <c> <d> <b>3</b> <b>4</b> </d> <e> <b>5</b> <b>6</b> </e> </c></a>"""tag = xml.etree.ElementTree.fromstring(xml_str)print "find a-----------------------------------------------------"find_tag = tag.findall("a") #自己是搜索不到print find_tagprintfind_tag = tag.findall("*") #找打text为1,2的b和Cprint find_tag print "find b-----------------------------------------------------" find_tag = tag.findall("b") #找到 text 为 1,2的bprint find_tagfor item in find_tag: print item,item.text print find_tag = tag.findall(".//b") #找到 text 为 1,2,3,4,5,6 的bprint find_tagfor item in find_tag: print item,item.text print "find d-----------------------------------------------------" find_tag = tag.findall("d") #不是A的子节点,这样搜索不到。print find_tagprintfind_tag = tag.findall("c/d") #到达d的路径,path不包括当前节点print find_tagprintfind_tag = tag.findall(".//d") #使用.//前缀,从当前节点寻找所有的下方节点print find_tagprintprint "find path . *-----------------------------------------------------"tag_c = tag.find(".//c") #从C开始找find_tag = tag_c.findall(".//b") ##找C下面所有层次找b,找到 text 为 3,4,5,6 的bprint find_tagfor item in find_tag: print item,item.text find_tag = tag_c.findall("*/b") #找到C,D下面一层所有tag为b的数据 ,也是找到 text 为 3,4,5,6 的bprint find_tagfor item in find_tag: print item,item.text print "xml namespace -----------------------------------------------------"xml_str="""<a xmlns="http://www.w3.org/TR/html4" > <b>1</b></a>"""tag = xml.etree.ElementTree.fromstring(xml_str)find_tag = tag.findall("*") #如果有xml命名空间,那么所有所有的tag都有名字空间的uri,如上这个tag字符串是 {http://www.w3.org/TR/html4}b 而不是bprint find_tag
倒霉的是,这几个暗礁怎么都让我碰上了。
【可以在标明作者和出处的情况下的完整转载,不得用于盈利和商业用途,否则每字1元,每图100,不降价,对百度文库,360doc加价一倍】
- Python ElementTree的find,findall函数参数
- Python的BeautifulSoup的find()和findAll()
- Python爬虫:BeautifulSoup的find()和findAll()
- 使用BeautifulSoup中的find()和findAll()函数时关键字参数的注意事项
- python爬虫(1.find和findAll函数提取文本)
- python里使用正则的findall函数
- [python]findall函数讲解
- findall函数的语法
- python re 模块 findall 函数
- python - BeautifulSoup中的find()和findAll()
- Python网络爬虫(2)处理网页数据find和findall函数
- bs.find()和bs.findAll()的区别,print()函数的格式化
- C# Find() 与 FindAll()方法的使用
- BeautifulSoup的高级应用 之 find findAll
- BeautifulSoup的高级应用 之 find findAll
- python re 模块 findall 函数用法简述
- python re 模块 findall 函数用法简述
- python re 模块 findall 函数用法简述
- codeforces 126B Password DP KMP
- 关于sim/usim的一些概念
- JSTL API
- 微信版中文计算器
- Asynctask 代码分析
- Python ElementTree的find,findall函数参数
- 初探类的字段.属性.方法.事件
- JSTL与EL
- 8086的地址ffff:ffff和0:ffef回绕问题
- EDBC(Emacs-Lisp Database Connectivity)
- java 理解main方法&&代码块
- linux oos 声卡 驱动
- java 正则表达式的使用
- PHP中 flock的作用