2014-05-18 54 views
1

我想搜索XML文檔中的字符串,然後打印出包含該字符串的整個元素或元素。這是到目前爲止我的代碼:列表無法序列化錯誤,當使用Xpath lxml etree

post = open('postf.txt', 'r') 
postf = str(post.read()) 

root = etree.fromstring(postf) 

e = root.xpath('//article[contains(text(), "stuff")]') 

print etree.tostring(e, pretty_print=True) 

這是一個正在從postf.txt搜索的XML

<stuff> 

<article date="2014-05-18 17:14:44" title="Some stuff">More testing 
debug 
[done] 
<tags>Hello and stuff 
</tags></article> 

</stuff> 

最後,這是我的錯誤:

File "cliassis-1.2.py", line 107, in command 
    print etree.tostring(e, pretty_print=True) 
    File "lxml.etree.pyx", line 3165, in lxml.etree.tostring (src\lxml\lxml.etree.c:69414) 
TypeError: Type 'list' cannot be serialized. 

我希望這樣做,是搜索包含我搜索的字符串的所有元素,然後打印出標籤。所以,如果我有測試之類的東西,我搜索「測試」,我希望它打印出「測試和東西

回答

2
articles = root.xpath('//article[contains(text(), "stuff")]') 

for article in articles: 
    print etree.tostring(article, pretty_print=True) 

root.xpath返回一個Python列表,所以e是一個列表。etree.tostring轉換LXML _Elements爲字符串;它沒有的_Elements列表轉換爲字符串,那麼使用for-loop打印_Elements列表作爲字符串內

+0

這工作完美,解釋讓我明白爲什麼它不工作。謝謝。 :d – Vales

1

您還可以使用內置的功能加入這樣

e = root.xpath('//article[contains(text(), "stuff")]') strng = "".join(e)//list to string conversion print strng