Python xml.dom.minidom是否生成无效的xml?
我在xml.dom.minidom python包中遇到了一个奇怪的问题。我生成一个文档,用从终端获取的数据填充它。有时,此类数据包含终端控制字符。当我使用Python xml.dom.minidom是否生成无效的xml?,python,xml,minidom,Python,Xml,Minidom,我在xml.dom.minidom python包中遇到了一个奇怪的问题。我生成一个文档,用从终端获取的数据填充它。有时,此类数据包含终端控制字符。当我使用minidom.toprettyxml()将这样的字符存储在文本数据节点中时,一切似乎都正常,但是,生成的文档不是有效的XML 有人知道为什么minidom允许生成无效文档吗?这和“迷你”部分有关吗 以下是提取的示例代码(也有一些系统信息): Python 2.6.5(r265:79063,2010年4月16日,13:57:41) [GCC
minidom.toprettyxml()
将这样的字符存储在文本数据节点中时,一切似乎都正常,但是,生成的文档不是有效的XML
有人知道为什么minidom允许生成无效文档吗?这和“迷你”部分有关吗
以下是提取的示例代码(也有一些系统信息):
Python 2.6.5(r265:79063,2010年4月16日,13:57:41)
[GCC 4.4.3]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>从xml.dom导入minidom
>>>impl=minidom.getdoImplementation()
>>>doc=impl.createDocument(无,“结果”,无)
>>>root=doc.firstChild
>>>outString=“test”+chr(1)#这里是控制字符
>>>root.appendChild(doc.createTextNode(outString))
>>>doc.toprettyxml(encoding=“utf-8”)
“\n\n\t测试\x01\n\n”
>>>打开(“/tmp/outfile”,“w”)作为f:
... f、 写入(doc.toprettyxml(encoding=“utf-8”))
...
>>>doc2=minidom.parse(“/tmp/outfile”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.6/xml/dom/minidom.py”,第1918行,解析中
返回expatbuilder.parse(文件)
解析中的文件“/usr/lib/python2.6/xml/dom/expatbuilder.py”,第924行
结果=builder.parseFile(fp)
文件“/usr/lib/python2.6/xml/dom/expatbuilder.py”,第207行,在parseFile中
parser.Parse(缓冲区,0)
xml.parsers.expat.expat错误:格式不正确(无效令牌):第3行第6列
>>>打开(“/tmp/outfile”,“r”).readlines()
['\n'、'\n'、'\t测试\x01\n'、'\n']
>>>
查看“写入”数据的代码,它只会转义符号、斜杠和括号:
def _write_data(writer, data):
"Writes datachars to writer."
data = data.replace("&", "&").replace("<", "<")
data = data.replace("\"", """).replace(">", ">")
writer.write(data)
def_write_数据(写入器,数据):
“将数据字符写入写入器。”
数据=数据。替换(&),“&;”。替换(“,”)
writer.write(数据)
正如您所猜测的,minidom并不是一个完全健壮的实现(例如,它缺少名称空间的实现)。尝试将文本移动到CDATA区域。有各种可能的解决方法,我甚至比CDATA更好,但问题是:为什么minidom生成无效的XML?这是一个bug还是一个特性?(可能与minidom的“光明”有关)
def _write_data(writer, data):
"Writes datachars to writer."
data = data.replace("&", "&").replace("<", "<")
data = data.replace("\"", """).replace(">", ">")
writer.write(data)