SAX解析器输出中缺失CDATA指令

0 投票
1 回答
949 浏览
提问于 2025-04-16 08:08

我正在使用以下代码来读取一个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中。

撰写回答