0
import xml.dom.minidom

text='2 > 1'

impl = xml.dom.minidom.getDOMImplementation()
doc = impl.createDocument(None, "foobar", None)
docElem = doc.documentElement
text = doc.createTextNode(text)
docElem.appendChild(text)

f=open('foo.xml', 'w')
doc.writexml(f)
f.close()

foo.xml が次のように読み取られることを期待していました。

<?xml version="1.0" ?><foobar>2 &gt; 1</foobar>

しかし、実際には次のように書かれています。

<?xml version="1.0" ?><foobar>2 &amp;gt; 1</foobar>

minidom が既にエスケープされたシーケンスをエスケープしないようにするにはどうすればよいですか? 私のアプリケーションでは、テキストは (xml 以外の) ドキュメントから読み取られているため、単純にtext = '2 > 1'.

4

1 に答える 1

2

挿入する前にエスケープ解除:

from xml.sax.saxutils import unescape

text = doc.createTextNode(unescape(text))

エスケープは書き込み時に行われ、無効にすることはできません。場合によっては、XMLにリテラル テキストを含めたい&gt;ことがありますが、その場合は適切にエスケープする必要があります。入力が XML エスケープされている場合は、挿入する前に単純にエスケープ解除してください。

于 2013-05-02T13:25:24.440 に答える