Синтаксический анализ XML элемента CDATA

1

Я хочу проанализировать 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>

Пожалуйста, помогите мне найти решение.

Теги:
cdata

3 ответа

4

Это не должно быть проблемой. с 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

... prints:

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

1

Я не уверен, что вы ищете. Вот ответ, основанный на некоторых диких предположениях.

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']
>>> 
  • 0
    я хочу получить полные данные в виде строки, как
  • 0
    @shaan: Wrt фрагмента кода, который я опубликовал, doc.text даст вам «полные данные в виде строки».
0

Насколько я знаю, стандартный python SAX парсер правильно обрабатывает CDATA. Вы сможете проанализировать его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню