使用 CDATA 获取元素的文本
Get element's text with CDATA
说,我有一个元素:
>>> el = etree.XML('<tag><![CDATA[content]]></tag>')
>>> el.text
'content'
我想得到的是<![CDATA[content]]>
。我该怎么做?
您可以考虑使用 BeautifulSoup 并查找 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]]>
当您执行 el.text
时,它总是会为您提供纯文本 content
。
要查看序列化元素,请尝试 tostring()
:
el = etree.XML('<tag><![CDATA[content]]></tag>')
print(etree.tostring(el).decode())
这将打印:
<tag>content</tag>
要保留 CDATA,您需要使用 XMLParser()
with 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 中”的要求。
说,我有一个元素:
>>> el = etree.XML('<tag><![CDATA[content]]></tag>')
>>> el.text
'content'
我想得到的是<![CDATA[content]]>
。我该怎么做?
您可以考虑使用 BeautifulSoup 并查找 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]]>
当您执行 el.text
时,它总是会为您提供纯文本 content
。
要查看序列化元素,请尝试 tostring()
:
el = etree.XML('<tag><![CDATA[content]]></tag>')
print(etree.tostring(el).decode())
这将打印:
<tag>content</tag>
要保留 CDATA,您需要使用 XMLParser()
with 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 中”的要求。