首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中使用SAX生成XML输出时如何插入DTD DOCTYPE内容

在Python中使用SAX生成XML输出时如何插入DTD DOCTYPE内容
EN

Stack Overflow用户
提问于 2011-06-17 00:20:34
回答 1查看 815关注 0票数 3

我正在尝试使用python(实际上是jython) xml.sax.saxutils.XMLGenerator生成一个大的XML文件。我希望包含DTD信息,但我不知道如何将DTD字符串传递给SAX。下面是示例SAX编写器类:

代码语言:javascript
复制
from xml.sax.saxutils import XMLGenerator

class xml_writer:
    def __init__(self, output, encoding):
        """
        an XML writer object that generate xml output to a file
        """
        xmlwriter = XMLGenerator(output, encoding)
        xmlwriter.startDocument()
        self._writer = xmlwriter
        self._output = output
        self._encoding = encoding

        self.attr_vals = {}
        self.attr_qnames = {}
        return

    def start_elem(self, name):
        name = unicode(name)
        attrs = AttributesNSImpl(self.attr_vals, self.attr_qnames)
        self._writer.startElementNS((None, name), name, attrs)
        self._writer._out.write('\n')
        self.attr_qnames = {}
        self.attr_vals = {}

    def end_elem(self, name):
        name = unicode(name)
        self._writer.endElementNS((None, name), name)
        self._writer._out.write('\n')

    def setAttribute(self, aname, value):
        aname = unicode(aname)
        value = unicode(value)
        self.attr_vals[(None, aname)] = value
        self.attr_qnames[(None, aname)] = aname

    def close(self):
        """
        Clean up 
        """
        self._writer.endDocument()
        return

感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-19 03:55:22

您可以子类化XMLGenerator并添加一个write()方法。下面是一个示例:

代码语言:javascript
复制
import sys
from xml.sax.saxutils import XMLGenerator

class MyXMLGenerator(XMLGenerator):
    def __init__(self, out=sys.stdout, encoding="UTF-8"):
        XMLGenerator.__init__(self, out, encoding)
        self.out = out

    def write (self,s):
        self.out.write(s)

def writexml(out):
    xmlwriter = MyXMLGenerator(out)
    xmlwriter.startDocument()
    xmlwriter.write("<!DOCTYPE test SYSTEM 'test.dtd'>\n")
    xmlwriter.startElement('test', {"a": "1"})
    xmlwriter.characters('abc123')
    xmlwriter.endElement('test')
    xmlwriter.endDocument()

if __name__ == '__main__':
    writexml(out=open("out.xml", "w"))

out.xml中的结果输出

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test SYSTEM 'test.dtd'>
<test a="1">abc123</test>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6375200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档