I am trying to search for a string within an XML document, and then print out the entire element, or elements, that contain that string. This is my code so far:
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)
This is the XML that is being searched from postf.txt
<stuff>
<article date="2014-05-18 17:14:44" title="Some stuff">More testing
debug
[done]
<tags>Hello and stuff
</tags></article>
</stuff>
And finally, this is my error:
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.
What I want this to do, is search for all elements containing the string I searched for, and then print out the tags. So if I have test and stuff, and I search for 'test', I want it to print out "test and stuff
articles = root.xpath('//article[contains(text(), "stuff")]')
for article in articles:
print etree.tostring(article, pretty_print=True)
root.xpath
returns a Python list. So e
is a list. etree.tostring
converts lxml _Elements
to strings; it does not convert lists of _Elements
to strings. So use a for-loop
to print the _Elements
inside the list as strings.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With