停止minidom将< >转换为< >
我正在尝试将一些数据从我的谷歌应用引擎的数据存储输出为XML格式,以便Flash文件可以读取。
问题是,当我使用CDATA标签时,输出的XML中出现了<
,而不是<。
例如:
<name><![CDATA][name]]></name>
这是我用来输出XML的Python代码:
doc = Document()
feed = doc.createElement("feed")
doc.appendChild(feed)
tags_element = doc.createElement("names")
feed.appendChild(tags_element)
copen = "<![CDATA]["
cclose = "]]>"
tags = db.GqlQuery("SELECT * FROM Tag ORDER BY date DESC")
for tag in tags:
tag_element = doc.createElement("name")
tags_element.appendChild(tag_element)
the_tag = doc.createTextNode("%s%s%s" % (copen,str(tag.thetag), cclose))
tag_element.appendChild(the_tag)
self.response.headers["Content-Type"] = "application/xml"
self.response.out.write(doc.toprettyxml(indent=" "))
我知道这是一个编码问题,但就是找不到问题的根源。
提前谢谢你们!
3 个回答
0
要实现你想做的事情,你需要用合适的minidom方法添加一个CDATA块。这个问题其实不是编码的问题,而是当你使用createTextNode时,它会把XML中的控制字符转换成实际的文本字符,这样做是为了方便你,没错。
0
createTextNode
这个函数的作用是把一些特殊字符(比如 <
、>
和 &
)转换成可以安全显示的格式。
8
看起来 createCDATASection 这个方法对我来说是有效的。
for tag in tags:
tag_element = doc.createCDATASection(tag.thetag)
tags_element.appendChild(tag_element)