【问题标题】:XML parsing of a CDATA elementCDATA 元素的 XML 解析
【发布时间】:2011-07-06 10:30:42
【问题描述】:

我想解析包含以下格式的 CDATA 元素的 xml

<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>

请帮我找出解决办法。

【问题讨论】:

    标签: python xml cdata


    【解决方案1】:

    这不应该是任何问题 - 例如。使用 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
    

    ...打印:

    下午 6:50,https://www.movi​​etickets.com/purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=18:50&perfd=03012011,9:40 PM,https://www.movi​​etickets .com/purchase.asp?afid=rgncom&house_id=6446&language=2&movie_id=87050&perft=21:40&perfd=03012011

    【讨论】:

      【解决方案2】:

      我不确定您在寻找什么。这是基于一些疯狂假设的答案。

      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']
      >>> 
      

      【讨论】:

      • 我想以字符串形式检索完整数据
      • @shaan:W.r.t 我发布的代码 sn-p doc.text 将为您提供“完整数据作为字符串”。
      【解决方案3】:

      据我所知,standard python SAX 解析器可以正确处理 CDATA。您将能够解析它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-06
        • 2021-12-15
        • 1970-01-01
        • 2013-12-13
        • 2012-09-11
        相关资源
        最近更新 更多