如何使用 yattag 库输出 CDATA
How to output CDATA using yattag library
我正在尝试使用以下代码生成包含标签 </documents>
.
的 XML 文件
string = "dasdd Wonder asdf new single, “Tomorrow” #URL# | " \
"oiojk asfddsf releases new asdfdf, “gfsg” | " \
"Identity of asfqw who dasd off asdfsdf Mainland jtyjyjui revealed #URL#"
from yattag import Doc, indent
import html, re
doc, tag, text = Doc().tagtext()
with tag('author', lang='en'):
with tag('documents'):
for tweet in string.split(' | '):
with tag('document'):
tweet = html.unescape(tweet)
text('<![CDATA[{}]]'.format(tweet))
result = indent(doc.getvalue(), indentation=' ' * 4, newline='\n')
with open('test.xml', 'w', encoding='utf-8') as f:
f.write(result)
我想在文本周围添加 CDATA
标记,但是当我使用 Notepad++
打开生成的文件而不是输出为:
<document><![CDATA[oiojk asfddsf releases new asdfdf, “gfsg”]]></document>
看起来像(有 HTML 个实体):
<document><![CDATA[oiojk asfddsf releases new asdfdf, “gfsg”]]</document>
我尝试使用 HTML
库(html.unescape
行)来丢弃 HTML 实体,但我做不到。
如何解决这个编码问题?
text
方法总是用 <
替换“<”。如果您不想进行那种转义,您可以使用 asis
方法(它插入字符串 "as is")。但是,在您的情况下,使用 Yattag 的 cdata
方法会更合适。
from yattag import Doc
help(Doc.cdata)
cdata(self, strg, safe=False) 附加一个包含提供的字符串的 CDATA 部分。
您不必担心可能会终止的 ]]>
序列
CDATA 部分。它们被替换为 ]]]]><![CDATA[>
.
如果你确定你的字符串不包含]]>
,你可以通过safe = True
。
如果这样做,将不会在您的字符串中搜索 ]]>
序列。
因此,对于您的情况,您可以这样做:
for tweet in string.split(' | '):
with tag('document'):
tweet = html.unescape(tweet)
doc.cdata(tweet)
我正在尝试使用以下代码生成包含标签 </documents>
.
string = "dasdd Wonder asdf new single, “Tomorrow” #URL# | " \
"oiojk asfddsf releases new asdfdf, “gfsg” | " \
"Identity of asfqw who dasd off asdfsdf Mainland jtyjyjui revealed #URL#"
from yattag import Doc, indent
import html, re
doc, tag, text = Doc().tagtext()
with tag('author', lang='en'):
with tag('documents'):
for tweet in string.split(' | '):
with tag('document'):
tweet = html.unescape(tweet)
text('<![CDATA[{}]]'.format(tweet))
result = indent(doc.getvalue(), indentation=' ' * 4, newline='\n')
with open('test.xml', 'w', encoding='utf-8') as f:
f.write(result)
我想在文本周围添加 CDATA
标记,但是当我使用 Notepad++
打开生成的文件而不是输出为:
<document><![CDATA[oiojk asfddsf releases new asdfdf, “gfsg”]]></document>
看起来像(有 HTML 个实体):
<document><![CDATA[oiojk asfddsf releases new asdfdf, “gfsg”]]</document>
我尝试使用 HTML
库(html.unescape
行)来丢弃 HTML 实体,但我做不到。
如何解决这个编码问题?
text
方法总是用 <
替换“<”。如果您不想进行那种转义,您可以使用 asis
方法(它插入字符串 "as is")。但是,在您的情况下,使用 Yattag 的 cdata
方法会更合适。
from yattag import Doc
help(Doc.cdata)
cdata(self, strg, safe=False) 附加一个包含提供的字符串的 CDATA 部分。
您不必担心可能会终止的 ]]>
序列
CDATA 部分。它们被替换为 ]]]]><![CDATA[>
.
如果你确定你的字符串不包含]]>
,你可以通过safe = True
。
如果这样做,将不会在您的字符串中搜索 ]]>
序列。
因此,对于您的情况,您可以这样做:
for tweet in string.split(' | '):
with tag('document'):
tweet = html.unescape(tweet)
doc.cdata(tweet)