прекратить преобразование минидома <> в <> - PullRequest
3 голосов
/ 06 мая 2010

Я пытаюсь вывести некоторые данные из моего хранилища данных механизма приложений Google в xml, чтобы их мог прочитать флэш-файл,

Проблема заключается в том, что при использовании тегов CDATA выводимый xml содержит &lt; вместо <</p>

Например,

<name>&lt;![CDATA][name]]&gt;</name>

вот мой питон, который выводит xml:

    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 ]

8 голосов
/ 06 мая 2010

Кажется, у меня работает метод createCDATASection.

for tag in tags:
    tag_element = doc.createCDATASection(tag.thetag)
    tags_element.appendChild(tag_element)
0 голосов
/ 06 мая 2010

createTextNode преобразует зарезервированные символы (< > &) в сущности.

0 голосов
/ 06 мая 2010

Чтобы сделать то, что вы пытаетесь, вам нужно добавить CDATA-блок, используя соответствующие методы minidom. По сути, это не проблема кодирования, но когда вы используете createTextNode, он кодирует управляющие символы XML в реальные текстовые символы для вас, чтобы быть полезным, без сомнения.

...