Директива CDATA отсутствует в выходных данных SAX Parser - PullRequest
0 голосов
/ 06 декабря 2010

Я использую следующий код для чтения XML-файла и записи его в выходной XML-файл с использованием SAX Parser. Однако в выходном файле отсутствуют директивы 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 голосов
/ 07 декабря 2010

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

...