代码之家  ›  专栏  ›  技术社区  ›  x-yuri

使用CDATA获取元素的文本

  •  0
  • x-yuri  · 技术社区  · 6 年前

    我有一个元素:

    >>> el = etree.XML('<tag><![CDATA[content]]></tag>')
    >>> el.text
    'content'
    

    <![CDATA[content]]> . 我该怎么办?

    0 回复  |  直到 6 年前
        1
  •  3
  •   Daniel Haley    6 年前

    当你这样做的时候 el.text ,这总是会给你一个纯文本 content .

    若要查看序列化元素,请尝试 tostring()

    el = etree.XML('<tag><![CDATA[content]]></tag>')
    print(etree.tostring(el).decode())
    

    这将打印:

    <tag>content</tag>
    

    XMLParser() 具有 strip_cdata=False :

    parser = etree.XMLParser(strip_cdata=False)
    
    el = etree.XML('<tag><![CDATA[content]]></tag>', parser=parser)
    print(etree.tostring(el).decode())
    

    <tag><![CDATA[content]]></tag>
    

    这应该足以满足您的” 我想在测试中确保内容包装在CDATA中

        2
  •  2
  •   Sebastien D    6 年前

    你可以考虑用美组来寻找 CDATA 实例:

    import bs4
    from bs4 import BeautifulSoup
    
    data='''<tag><![CDATA[content]]></tag>'''
    soup = BeautifulSoup(data, 'html.parser')
    "<![CDATA[{}]]>".format(soup.find(text=lambda x: isinstance(x, bs4.CData)))
    

    <![CDATA[content]]>