2010-12-06 2 views
0

Я использую следующий код для чтения XML-файла и записи его в выходной файл XML с помощью SAX Parser. Однако в выходном файле отсутствуют директивы CDATA. Содержимое раздела CDATA все в порядке, но начальный <![CDATA[ и закрытие ]]> в выходном файле отсутствуют!Отсутствует директива CDATA из SAX Parser output

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')) 

Что я делаю неправильно?

ответ

0

CDATA - это удобная аннотация, используемая для включения текста, содержащего разметку. Тот факт, что текстовый узел был заключен в CDATA в определенной сериализации, может быть сохранен парсером или может быть отброшен. Если у вашего анализатора SAX есть события для разделов CDATA, вы должны обработать их, а затем повторно обернуть текстовый узел в CDATA на выходе.