可能从QXmlStreamWriter获得QDomElement

Possible to get QDomElement from QXmlStreamWriter?

本文关键字:获得 QDomElement QXmlStreamWriter      更新时间:2023-10-16

我正在使用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