如何完全从原始 XML 创建 twisted.words.xish.domish.Element

Posted

技术标签:

【中文标题】如何完全从原始 XML 创建 twisted.words.xish.domish.Element【英文标题】:How to create twisted.words.xish.domish.Element entirely from raw XML 【发布时间】:2010-01-19 12:26:28 【问题描述】:

我很惊讶 XML 基本对象 (twisted.words.xish.domish.Element) 不能完全由 XML 字符串创建。最相似的方式是:

msg = "<iq to='juick@juick.com' id='id123' type='get'> \
            <query xmlns='http://juick.com/query#messages' mid='123456'/> \
       </iq>"
iq = domish.Element(('',''))
iq.addRawXml(msg)

但它会生成:

iq.toXml()

u"<><iq to='juick@juick.com' id='id123' type='get'>             <query xmlns='http://juick.com/query#messages' mid='123456'/>        </iq></>"

除了编写我自己的 IElement 实现之外,还有其他方法可以使用原始 XML 吗?

【问题讨论】:

【参考方案1】:

这是我用于片段的内容,改编自网络上某处的内容。

from twisted.words.xish import domish

class ElementParser(object):
    "callable class to parse XML string into Element"

    def __call__(self, s):
        self.result = None
        def onStart(el):
            self.result = el
        def onEnd():
            pass
        def onElement(el):
            self.result.addChild(el)

        parser = domish.elementStream()
        parser.DocumentStartEvent = onStart
        parser.ElementEvent = onElement
        parser.DocumentEndEvent = onEnd
        tmp = domish.Element(("", "s"))
        tmp.addRawXml(s)
        parser.parse(tmp.toXml())
        return self.result.firstChildElement() 

【讨论】:

请注意,解析器应该接收 str,而不是 unicode 对象(即parser.parse(tmp.toXml().encode('utf-8')))。见mail-archive.com/twisted-python@twistedmatrix.com/msg00432.html

以上是关于如何完全从原始 XML 创建 twisted.words.xish.domish.Element的主要内容,如果未能解决你的问题,请参考以下文章

从 sql 脚本创建 xml 文件

从 Java 中的 SOAPMessage 获取原始 XML

从 Feedburner RSS 提要中获取原始 XML 数据

从 .xml 文件中获取原始维度

如何删除创建 google-play-console 帐户的原始用户

黑莓:解析 XML 时如何获取 Node 的原始内容