我正在使用qxmpp编写一个小型XMPP服务器。现在,我想创建一个QXmppStanza,并将它呈现给服务器和我的插件
void QXmppServer::handleElement(const QDomElement &element)这个函数需要一个QDomElement而不是QXmppStanza。我在QXmppStanza及其派生类(除了解析(.))中找到的唯一的XML可实现函数是函数
void toXml(QXmlStreamWriter *writer)我还没有在qt中处理XML的经验,那么是否有一种比将XML写入字符串/ByteArray、使用它作为输入来创建新的QDomElement并返回它的documentElement更高效的方法呢?
发布于 2014-07-02 12:06:12
经过进一步的研究,我不得不承认这是不可能的。
正如QDomDocument的文档中所述,为了处理一个QDomDocument(和其他节点),我总是需要一个QDomElement:
由于元素、文本节点、注释、处理指令等不能存在于文档上下文之外(.)
QXmlStreamWriter没有QDomDocument,所以我必须创建一个QDomDocument (当然,它必须使用元素的时间长短),然后解析文本(QDomDocument::setContent)。
发布于 2017-03-28 18:57:16
我遇到了类似的问题,通过执行类似于下面所示的操作,我能够将流转换为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 elementhttps://stackoverflow.com/questions/24362884
复制相似问题