我正在使用qxmpp编写一个小型XMPP服务器。现在我想创建一个QXmppStanza,并使用
将其呈现给服务器和我的插件(就好像客户端已经发送了它一样)。void QXmppServer::handleElement(const QDomElement &element)
这个函数需要QDomElement而不是QXmppStanza。我在QXmppStanza及其派生类(除了parse(…))中发现的唯一与XML相关的函数是函数
void toXml(QXmlStreamWriter *writer)
我没有在qt XML处理的经验,所以有一个更高效的方式比写XML字符串/ByteArray,使用它作为输入来创建一个新的QDomElement和返回它的documentElement?
在做了一些进一步的研究之后,我不得不接受这是不可能的。
正如QDomDocument的文档中所述,我总是需要一个QDomDocument才能与QDomElement(和其他节点)一起工作:
由于元素、文本节点、注释、处理指令等不能存在于文档的上下文之外(…)
QXmlStreamWriter没有QDomDocument,所以我真的必须创建一个QDomDocument(当然,只要我想与元素一起工作),然后解析文本(QDomDocument::setContent)。
我有一个类似的问题,并且能够通过执行类似于下面所示的操作将流转换为DOM元素。
第一步是流到字节数组。
QByteArray data;
QXmlStreamWriter writer(&data);
object->toXml(&writer);
第二步是设置DOM文档的内容。文档的document元素应该是您需要的DOM元素。
QDomDocument temp;
if(temp.setContent(data))
QDomElement element = temp.documentElement(); // do whatever you want with this element