python用elementtree处理XML文件

 
python用elementtree处理XML文件
2010年07月04日 18:57

---------------------------------------------------------------貌似很简单,直接试用一下就知道了。。。
from xml.etree import ElementTree

a= '''

    root text   
    sub1's tails
   
        subEle2 text
        sub2'sub1 text
        sub2'sub2 text
       
            just 4 fun
       

        tag1's text1
        tag1's text2
        tag1's text3
        tag1's text4    
   

    subEle3's text
'''

r = ElementTree.fromstring(a)         # 从字符串中生成xml树

>>> ElementTree.tostring(r)           # 显示
>>> ElementTree.dump(r)
>>> ElementTree.dump(r.find('subEle2'))
>>> dir(r)                                    # o是2.5版本
['__delitem__', '__delslice__', '__doc__', '__getitem__', '__getslice__', '__init__', '__len__', '__
module__', '__repr__', '__setitem__', '__setslice__', '_children', 'append', 'attrib', 'clear', 'fin
d', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'keys', 'makeelem
ent', 'remove', 'set', 'tag', 'tail', 'text']

------------------------- root本身的属性等
>>> str.strip(r.text)        # tag、text、items、attrib的所指
'root text'
>>> r.tag
'root'
>>> r.items()         # 是个2维元组的列表
[('attriball', 'all'), ('item_key2', 'iKey2'), ('item_key1', 'ikey1')]

>>> r.attrib          # 是个集合
{'attriball': 'all', 'item_key2': 'iKey2', 'item_key1': 'ikey1'}

>>> r.get('attriball')   # 如果没有该属性返回None哈。
'all'

>>> r.keys()
['attriball', 'item_key2', 'item_key1']

>>> if r.attrib.has_key("item_key2"):
...     print r.attrib['item_key2']
...
iKey2

------------------------------------- root的孩子
>>> for ele in r.getiterator():           # 所有的元素以及内容, 2.7以后用iter()代替了。
...     print ele.tag
...     if ele.text:
...         print '-->%s' % str.strip(ele.text)
...
   
>>> r.find('subEle1').tail      # 元素的尾巴,貌似元素之间没人管的东东
" sub1's tails\n    "

>>> r.getiterator('tag1')           # 得到特定tag的元素,可以跨层,但是find不行。
[, , , 00>]
>>> print r.find('tag1')
None

>>> r.find('subEle2/tag1')

>>> r.findall('subEle2/tag1')
[, , , 00>]

------------------------------------------- 写元素树
n = ElementTree.ElementTree()
r = ElementTree.Element('root')
n._setroot(r)
>>> ElementTree.dump(n)

ElementTree.SubElement(r, 'subEle1', {'subAttrib' : "subAttrib1"})
t = ElementTree.Element("subEle2", {'subItem1' : 'ele21', 'subItem2' : 'ele22'})
t.text = "subEle2 text"        # 属性可以用set来修改。
r.append(t)

for i in range(1, 5):
    tt = ElementTree.Element("tag1")
    tt.text = "tag1's text%s" % i
    t.append(tt)
   
t = r.find('subEle1')
t.tail = "subele1's tail"   
   
n.write(r'c:\test.xml',"utf-8")
-------------------------------------------------
-

subele1's tail
-
subEle2 text
tag1's text1
tag1's text2
tag1's text3
tag1's text4


---------------------------------------------------从文件中创建ElementTree

>>> x = ElementTree.ElementTree(file=r'c:\test.xml') # 从文件读出
>>> ElementTree.dump(x)

>>> r = x.getroot()         #得到根节点
>>> a = r.find('subEle1')   # 找到子节点
>>> ElementTree.dump(a)
subele1's tail
>>> a.set('new', 'new1')    # 设置新属性
>>> ElementTree.dump(a)
subele1's tail
>>> r.remove(a)            # 删除一个节点。。。

>>> a = r.find('subEle2')        #   删除1级节点下面的节点。。。
>>> for i in a.findall('tag1'):
...     a.remove(i)

 

转自:http://hi.baidu.com/derris/blog/item/e0e3b850e7abbe6f84352436.html

 

附上 PYTHON 官方网址:

关于ElementTree类的成员方法:

http://docs.python.org/library/xml.etree.elementtree.html

你可能感兴趣的:(python,学习,python)