4

フラッシュファイルが読み取れるように、GoogleAppEngineデータストアからxmlにデータを出力しようとしています。

問題は、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="    "))

私はこれがエンコーディングの問題であることを知っていますが、問題のルートにたどり着くことができないようです、

前もって感謝します

4

3 に答える 3

8

createCDATASectionメソッドが機能しているようです。

for tag in tags:
    tag_element = doc.createCDATASection(tag.thetag)
    tags_element.appendChild(tag_element)
于 2010-05-06T11:46:38.780 に答える
0

試行していることを実行するには、適切なminidomメソッドを使用して実際にCDATAブロックを追加する必要があります。それ自体はエンコードの問題ではありませんが、createTextNodeを使用すると、XML制御文字が実際のテキスト文字にエンコードされ、役立つことは間違いありません。

于 2010-05-06T11:01:08.920 に答える
0

createTextNode予約済みの文字(< > &)をエンティティに変換します。

于 2010-05-06T11:02:07.780 に答える