2014-06-23 21 views
1

我正在使用qxmpp编写一个小的XMPP服务器。现在,我想创建一个QXmppStanza和目前它(就好象一个客户送了它)到服务器,我的插件使用可能从QXmlStreamWriter获取QDomElement?

void QXmppServer::handleElement(const QDomElement &element) 

此功能需要一个QDomElement而不是QXmppStanza。唯一的XML realted功能我在QXmppStanza及其派生类中(除了解析(...))是函数

void toXml(QXmlStreamWriter *writer) 

我没有与XML经验,在QT处理呢,所以有一个更比将XML写入字符串/ ByteArray更有效,将其用作输入以创建新的QDomElement并返回其documentElement?

回答

0

经过一番进一步的研究,我不得不接受它是不可能的。

由于QDomDocument的文件中指出,我总是需要QDomDocument为了与QDomElement(和其他节点)的工作:

因为元素,文本节点,注释,处理指令等,就不能存在之外文档(...)

的QXmlStreamWriter的背景下不具有QDomDocument,所以我真的必须创建一个QDomDocument(当然,只要我想用元件的作用,一定要住的)和然后解析文本(QDomDocument :: setContent)。

0

我有一个类似的问题,并能够通过做类似于下面显示的内容,从一个流转换为一个DOM元素。

第一步是流式传输到一个字节数组。

QByteArray data; 
QXmlStreamWriter writer(&data); 
object->toXml(&writer); 

第二步是设置一个DOM文档的内容。文档的文档元素应该是您需要的DOM元素。

QDomDocument temp; 
if(temp.setContent(data)) 
    QDomElement element = temp.documentElement(); // do whatever you want with this element