我正在使用qxmpp编写一个小型XMPP服务器。现在我想创建一个QXmppStanza并使用
将它(就像客户端发送它一样)呈现给服务器和我的插件void QXmppServer::handleElement(const QDomElement &element)
此功能需要QDomElement而不是QXmppStanza。我在QXmppStanza中找到的唯一XML实现的函数及其派生类(除了parse(...))是函数
void toXml(QXmlStreamWriter *writer)
我还没有在qt中处理XML的经验,所以有没有比将XML写入字符串/ ByteArray更高效的方法,使用它作为输入来创建新的QDomElement并返回其documentElement?
答案 0 :(得分:0)
在做了一些进一步的研究后,我不得不接受它是不可能的。
如QDomDocument文档中所述,我总是需要一个QDomDocument才能使用QDomElement(以及其他节点):
由于元素,文本节点,注释,处理指令等不能存在于文档的上下文之外(...)
QXmlStreamWriter没有QDomDocument,所以我真的必须创建一个QDomDocument(当然我必须使用该元素才能使用它),然后解析文本(QDomDocument :: setContent)。
答案 1 :(得分: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