如何完全从原始 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的主要内容,如果未能解决你的问题,请参考以下文章
从 Java 中的 SOAPMessage 获取原始 XML
从 Feedburner RSS 提要中获取原始 XML 数据