停止minidom将< >转换为&lt; &gt;

4 投票
3 回答
2971 浏览
提问于 2025-04-15 22:25

我正在尝试将一些数据从我的谷歌应用引擎的数据存储输出为XML格式,以便Flash文件可以读取。

问题是,当我使用CDATA标签时,输出的XML中出现了&lt;,而不是<。

例如:

<name>&lt;![CDATA][name]]&gt;</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)

撰写回答