如何从原始XML创建twisted.words.xish.domish.Element
我很惊讶,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></>"
有没有什么办法可以使用原始的XML,而不需要自己写一个IElement的实现呢?
1 个回答
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()