python处理xml数据
来源:互联网 发布:阿里云 内网带宽 编辑:程序博客网 时间:2024/05/21 13:17
由于最近需要使用python处理xml数据,因此到网上找了些资料学习了下。
最新学习的是python的xml.dom.minidom模块,按照资料上的说法,特地在python命令行环境验证了一下:
执行之后却发现xml.dom.minidom无法获取xml节点之间的文本值,代码如下:
>>> test = "<a><b>1</b><c id='1'>4</c></a>"
>>> tdoc = xml.dom.minidom.parseString(test)
w=tdoc.getElementsByTagName('b')
>>> node=w[0]
>>> node.nodeValue
网上的资料和python官方文档都说是用 node.nodeValue获取节点的值,但是上述代码却输出为空。注意到node.nodeValue只对TEXT_NODE类型的节点有效,因此查看一下节点b的类型:
>>> node.nodeType
1
1代表ELEMENT_NODE节点类型。于是在网上和官方文档找了半天,也没有获取到什么有用的信息。不得以,只好看看其他的模块。在网上的另一篇文章中对比了python处理xml的模块性能优势,于是选择了 cElementTree 模块,测试代码如下:
>>> import cElementTree
>>> dir(cElementTree )
['Comment', 'Element', 'ElementPath', 'ElementTree', 'PI', 'ProcessingInstruction', 'QName', 'SubElement', 'TreeBuilder', 'VERSION', 'XML', 'XMLID', 'XMLParser', 'XMLParserError', 'XMLTreeBuilder', '__doc__', '__file__', '__name__', '__version__', 'dump', 'fromstring', 'iselement', 'iterparse', 'parse', 'tostring']
>>> test = "<a><b>1</b><c id='1'>wewew</c></a>"
>>>
>>> dom = cElementTree.parse(test)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<string>", line 45, in parse
File "<string>", line 22, in parse
IOError: [Errno 2] No such file or directory: "<a><b>1</b><c id='1'>wewew</c></a>"
>>> dom = cElementTree.fromstring(test)
>>> root = dom.getroot()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: getroot
>>> type(dom)
<type 'Element'>
>>> dir(dom)
['!__reduce__', '__copy__', '__deepcopy__', 'append', 'clear', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'keys', 'makeelement', 'remove', 'set']
>>> dom.find('b')
<Element 'b' at 0xb7bef2d8>
>>> w=dom.find('b')
>>> w.text
'1'
>>> test = "<a><b>1</b><b id='1'>wewew</b></a>"
>>> dom = cElementTree.fromstring(test)
>>> dom.find('b')
<Element 'b' at 0xb7bef410>
>>> w=dom.find('b')
>>> w.text
'1'
>>> w=dom.find('b')
>>> w.text
'1'
>>> w=dom.findall('b')
>>> type(w)
<type 'list'>
>>> w
[<Element 'b' at 0xb7bef410>, <Element 'b' at 0xb7bef4a0>]
>>> w[1].text
'wewew'
>>> c=dom.find('c')
>>> dir(c)
['!__reduce__', '__copy__', '__deepcopy__', 'append', 'clear', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'keys', 'makeelement', 'remove', 'set']
>>> c.items()
[('id', '1')]
>>> c.get('id')
'1'
>>>
不过, cElementTree.fromstring(test)有一个小小的陷进,当你要查找的节点是root节点是,你无法使用dom.find(node)的方式获取节点,而且也无法判断当前节点是否是自己所需要的节点,一个变通的方法:
str(dom).split(' ')[1][1:-1] == node:
可以通过判断上述代码的True和False来获取
最新学习的是python的xml.dom.minidom模块,按照资料上的说法,特地在python命令行环境验证了一下:
执行之后却发现xml.dom.minidom无法获取xml节点之间的文本值,代码如下:
>>> test = "<a><b>1</b><c id='1'>4</c></a>"
>>> tdoc = xml.dom.minidom.parseString(test)
w=tdoc.getElementsByTagName('b')
>>> node=w[0]
>>> node.nodeValue
网上的资料和python官方文档都说是用 node.nodeValue获取节点的值,但是上述代码却输出为空。注意到node.nodeValue只对TEXT_NODE类型的节点有效,因此查看一下节点b的类型:
>>> node.nodeType
1
1代表ELEMENT_NODE节点类型。于是在网上和官方文档找了半天,也没有获取到什么有用的信息。不得以,只好看看其他的模块。在网上的另一篇文章中对比了python处理xml的模块性能优势,于是选择了 cElementTree 模块,测试代码如下:
>>> import cElementTree
>>> dir(cElementTree )
['Comment', 'Element', 'ElementPath', 'ElementTree', 'PI', 'ProcessingInstruction', 'QName', 'SubElement', 'TreeBuilder', 'VERSION', 'XML', 'XMLID', 'XMLParser', 'XMLParserError', 'XMLTreeBuilder', '__doc__', '__file__', '__name__', '__version__', 'dump', 'fromstring', 'iselement', 'iterparse', 'parse', 'tostring']
>>> test = "<a><b>1</b><c id='1'>wewew</c></a>"
>>>
>>> dom = cElementTree.parse(test)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<string>", line 45, in parse
File "<string>", line 22, in parse
IOError: [Errno 2] No such file or directory: "<a><b>1</b><c id='1'>wewew</c></a>"
>>> dom = cElementTree.fromstring(test)
>>> root = dom.getroot()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: getroot
>>> type(dom)
<type 'Element'>
>>> dir(dom)
['!__reduce__', '__copy__', '__deepcopy__', 'append', 'clear', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'keys', 'makeelement', 'remove', 'set']
>>> dom.find('b')
<Element 'b' at 0xb7bef2d8>
>>> w=dom.find('b')
>>> w.text
'1'
>>> test = "<a><b>1</b><b id='1'>wewew</b></a>"
>>> dom = cElementTree.fromstring(test)
>>> dom.find('b')
<Element 'b' at 0xb7bef410>
>>> w=dom.find('b')
>>> w.text
'1'
>>> w=dom.find('b')
>>> w.text
'1'
>>> w=dom.findall('b')
>>> type(w)
<type 'list'>
>>> w
[<Element 'b' at 0xb7bef410>, <Element 'b' at 0xb7bef4a0>]
>>> w[1].text
'wewew'
>>> c=dom.find('c')
>>> dir(c)
['!__reduce__', '__copy__', '__deepcopy__', 'append', 'clear', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'keys', 'makeelement', 'remove', 'set']
>>> c.items()
[('id', '1')]
>>> c.get('id')
'1'
>>>
不过, cElementTree.fromstring(test)有一个小小的陷进,当你要查找的节点是root节点是,你无法使用dom.find(node)的方式获取节点,而且也无法判断当前节点是否是自己所需要的节点,一个变通的方法:
str(dom).split(' ')[1][1:-1] == node:
可以通过判断上述代码的True和False来获取
- python处理xml数据
- python处理XML数据之SAX篇
- python 处理pascal voc数据 读取xml文件
- Python 处理 XML
- 使用Python处理XML
- Python处理XML
- 使用Python处理XML
- python 处理xml
- python处理xml
- python处理xml文件
- python minidom 处理XML
- python 处理xml 笔记
- python处理XML文件
- Python处理XML
- python 处理 xml
- Python XML操作处理
- Python XML操作处理
- python处理xml(写着玩)
- Linux C 函数参考(日期时间)
- 如何去除Ubuntu 11.X 的全局菜单
- 核心显示类 DisplayObject SubClass
- B树、B-树、B+树、B*树的特点 及其性能比较
- 漫谈经典排序算法:三、冒泡排序 && 快速排序
- python处理xml数据
- hello word!
- Jquery常用方法总结
- busybox 详解(一篇讲busybox很详细的文章)
- 漫谈经典排序算法:四、归并排序(合并排序)
- 讲解AGAL的文章
- 对话框中 嵌入RICHEDITView视图 设置垂直文本
- 有用的OPENSSL命令
- ubuntu下安装apache mysql mongodb php5 phpmyadmin rockmongo