【问题标题】:how to get Python XMLGenerator to output CDATA如何让 Python XMLGenerator 输出 CDATA
【发布时间】:2026-01-16 16:45:02
【问题描述】:

这是 Java 问题 How to output a CDATA section from a Sax XmlHandler 的 Python 等价物

xml.sax.saxutils.XMLGeneratorlxml.sax.ElementTreeContentHandler 均未提及 CDATA 部分。如何让它输出 CDATA?

【问题讨论】:

    标签: python xml sax


    【解决方案1】:

    你可以使用 xml.dom.minidom 像这样:

    doc = xml.dom.minidom.Document()
    article = doc.createElement('article')
    content = doc.createCDATASection('<p>Any CDATA</p>')
    article.appendChild(content)
    

    【讨论】:

    【解决方案2】:

    你可以直接在你的代码中使用

    from xml.sax.saxutils import XMLGenerator
    
    
    xml = XMLGenerator()
    xml.startDocument()
    xml.startElement('item', {})
    content = '<p>Stuff</p>'
    cdata = '<![CDATA[{}]]>'.format(content)
    xml.ignorableWhitespace(cdata)
    xml.endElement('item')
    xml.endDocument()
    

    或者用一个新的函数扩展 XMLGenerator 类

    from xml.sax.saxutils import XMLGenerator
    
    
    class _XMLGenerator(XMLGenerator):
        def cdata(self, content):
            cdata = '<![CDATA[{}]]>'.format(content)
            self.ignorableWhitespace(cdata)
    
    xml = _XMLGenerator()
    xml.startDocument()
    xml.startElement('item', {})
    content = '<p>Stuff</p>'
    xml.cdata(content)
    xml.endElement('item')
    xml.endDocument()
    

    我不使用xml.characters(content)的原因是因为它调用了xml.sax.saxutils.escape函数,而该函数又转义了&、。

    【讨论】:

      最近更新 更多