我正在嘗試使用以下代碼生成包含標記的XML文件。</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, indentimport html, redoc, tag, text = Doc().tagtext()with tag('author',): 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)我想在文本周圍添加標記,但是當我打開生成的文件時使用而不是將輸出為:CDATANotepad++<document><![CDATA[oiojk asfddsf releases new asdfdf, “gfsg”]]></document>它看起來像(使用HTML實體):<document><![CDATA[oiojk asfddsf releases new asdfdf, “gfsg”]]</document>我試圖使用庫(行)來丟棄HTML實體,但我無法做到。HTMLhtml.unescape如何解決此編碼問題?
1 回答

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
該方法始終將“<”替換為 。如果您不希望進行此類轉義,則可以改用該方法(它將插入字符串“按原樣”)。但是,在您的情況下,使用Yattag的方法會更合適。text<asiscdata
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)
添加回答
舉報
0/150
提交
取消