Python学习:python扩展库lxml学习

这几天一直想找到一个xml库,能够方便搜索,搜索条件能够满足xpath语法规则的。网上有很多xml库,在python下,找到lxml扩展库比较方便。虽然需要手工安装,但lxml却是很方便。windows下安装又傻瓜化的。把一些学习过程中摸索的记录下来,便于后续自己查阅,网上搜到的例子,实在是过于简单,也不适用,我主要查找xml节点,然后修改再保存。

首先准备一个xml文件,xml文件的内容,就用网上到处都有的xml例子。文件内容如下:



    	Harry Potter
    	29.99
    	
    
    	Learning XML
    	39.95
    	

1、解析文件

使用etree的parse函数,直接解析xml文件。测试的时候,也可以使用文本形式,不从文件读,就得用etree的fromstring函数。

from lxml import etree

store = etree.parse("/code/python/store.xml")
print(etree.tostring(store))

输出:

b'\n\t\n    \tHarry Potter\n    \t29.99\n    \t\n    \n    \tLearning XML\n    \t39.95\n    \t\n'


2、使用xpath查找所有book节点

可以使用下面这个代码。xpath返回的是一个list,可以for打印每个元素。如果找不到,返回的list是空的

book_list = store.xpath("//book")
for item in book_list:
    print(etree.tostring(item))
输出:

b'\n    \tHarry Potter\n    \t29.99\n    \t\n    '

b'\n    \tLearning XML\n    \t39.95\n    \t\n'


3、使用xpath查找节点title的内容为Learning XML

price = store.xpath("/bookstore/book[title='Learning XML']/price")
print(price[0].text)

输出:

39.95


4、使用xpath查找title节点树形lang='eng'的节点信息。通过getnext函数,返回该节点下一个节点信息。

price = store.xpath("/bookstore/book/title[@lang='eng']")
print(price[0].text)
print(price[0].getnext().text)

输出:

Harry Potter
29.99

5、使用xpath查找属性值

lang = store.xpath("/bookstore/book/title[@lang='eng']/@lang")
print(lang)

输出:

['eng', 'eng']

6、设置和添加属性和值

title = store.xpath("/bookstore/book/title[@lang='eng']")
print(etree.tostring(title[0]))
title[0].set('newattr', 'this is new attr value')
print(etree.tostring(title[0]))
title[0].set('newattr', 'modify attr value')
print(etree.tostring(title[0]))


输出:

b'Harry Potter\n \t'
b'Harry Potter\n \t'
b'Harry Potter\n \t'


7、设置节点值

title = store.xpath("/bookstore/book/title[@lang='eng']")
print(etree.tostring(title[0]))
title[0].text = 'Harry Potter New Name'
print(etree.tostring(title[0]))

输出:

b'Harry Potter\n \t'
b'Harry Potter New Name\n \t'


8、删除节点

title = store.xpath("/bookstore/book/title[@lang='eng']")
parent = title[0].getparent()
print(etree.tostring(parent))
parent.remove(title[0])
print(etree.tostring(parent))


输出:

b'\n\t\tHarry Potter\n \t29.99\n \t\n '
b'\n\t\t29.99\n \t\n '


9、保存文件

store = etree.parse("/code/python/store.xml")
print(etree.tostring(store))
title = store.xpath("/bookstore/book/title[@lang='eng']")
print(etree.tostring(title[0]))
title[0].text = 'Harry Potter New Name'
print(etree.tostring(title[0]))
store.write('/code/python/store_new.xml', encoding='GBK')
store = etree.parse("/code/python/store_new.xml")
print(etree.tostring(store))

输出:

b'\n\t\n\t\tHarry Potter\n \t29.99\n \t\n \n \tLearning XML\n \t39.95\n \t\n'
b'Harry Potter\n \t'
b'Harry Potter New Name\n \t'
b'\n\t\n\t\tHarry Potter New Name\n \t29.99\n \t\n \n \tLearning XML\n \t39.95\n \t\n'

未完待续


你可能感兴趣的:(python)