XML анализ на CDATA елемент

Искам да анализирам xml, който съдържа CDATA елемент в следния формат

<showtimes><![CDATA[6:50 PM,https://www.movietickets.com/purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=18:50&perfd=03012011,9:40 PM,https://www.movietickets.com/purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=21:40&perfd=03012011]]> </showtimes>

Моля, помогнете ми да намеря решение.


person shaan    schedule 01.03.2011    source източник


Отговори (3)


Това не би трябвало да е проблем - напр. с lxml:

from lxml import etree

input = '<showtimes><![CDATA[6:50 PM,https://www.movietickets.com/purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=18:50&perfd=03012011,9:40 PM,https://www.movietickets.com/purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=21:40&perfd=03012011]]> </showtimes>'

f = etree.fromstring(input)
for s in f.xpath("//showtimes"):
    print s.text

... отпечатъци:

18:50 ч., https://www.movietickets.com/purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=18:50&perfd=03012011, 21:40 ч., https://www.movietickets.com/ purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=21:40&perfd=03012011

person Mark Longair    schedule 01.03.2011

Не съм сигурен какво търсите. Ето отговор, основан на някои диви предположения.

PS: Това решение се нуждае от lxml.

>>> s = """<showtimes><![CDATA[6:50 PM,https://www.movietickets.com/purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=18:50&perfd=03012011,9:40 PM,https://www.movietickets.com/purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=21:40&perfd=03012011]]> </showtimes>"""
>>> from lxml import etree
>>> import urlparse
>>> doc = etree.fromstring(s)
>>> _time, url = doc.text.split(',', 1)
>>> _time # Not sure if you want this
'6:50 PM'
>>> for key, value in urlparse.parse_qs(urlparse.urlsplit(url).query).items():
    print key, value


perfd ['03012011,9:40 PM,https://www.movietickets.com/purchase.asp?afid=rgncom', '03012011 ']
movie_id ['87050', '87050']
language ['2', '2']
perft ['18:50', '21:40']
afid ['rgncom']
house_id ['6446', '6446']
>>> 
person Manoj Govindan    schedule 01.03.2011
comment
искам да извлека пълни данни като низ като - person shaan; 01.03.2011
comment
@shaan: W.r.t кодовият фрагмент, който публикувах doc.text, ще ви даде пълните данни като низ. - person Manoj Govindan; 01.03.2011

доколкото знам, стандартният анализатор на python SAX обработва CDATA правилно. Ще можете да го анализирате.

person lzap    schedule 01.03.2011