SAX解析器输出中缺失CDATA指令
我正在使用以下代码来读取一个XML文件,并通过SAX解析器将其写入一个XML输出文件。不过,输出文件缺少了CDATA指令。CDATA部分的内容是有的,但开头的 <![CDATA[
和结尾的 ]]>
在输出文件中没有出现!
from xml.sax import make_parser
from xml.sax.handler import ContentHandler
import sys
class XMLWriter():
def __init__ (self, xWriter):
self.xWriter = xWriter
def startElement(self, name, attrs):
self.xWriter.write('<' + name)
for sAttribute in attrs.getNames():
self.xWriter.write(' %s="%s"' % (sAttribute, attrs.getValue(sAttribute)))
self.xWriter.write('>')
def characters (self, ch):
self.xWriter.write(ch)
def endElement(self, name):
self.xWriter.write('</'+ name + '>')
def processingInstruction(self, target, data):
return
def setDocumentLocator(self, dummy):
return
def startDocument(self):
return
def endDocument(self):
return
parser = make_parser()
curHandler = XMLWriter(open('test.out.xml', 'w'))
parser.setContentHandler(curHandler)
parser.parse(open('test.xml'))
我哪里做错了呢?
1 个回答
0
CDATA是一种方便的标记,用来包含带有标记的文本。一个文本节点被放在CDATA中,这种情况在特定的序列化中可能会被解析器保留,也可能会被丢弃。如果你的SAX解析器有处理CDATA部分的事件,你就需要处理这些事件,然后在输出时再把文本节点重新包裹在CDATA中。