可以从QXmlStreamWriter获取QDomElement吗?

时间:2014-06-23 09:47:14

标签: c++ qt dom qxmpp

我正在使用qxmpp编写一个小型XMPP服务器。现在我想创建一个QXmppStanza并使用

将它(就像客户端发送它一样)呈现给服务器和我的插件
void QXmppServer::handleElement(const QDomElement &element)

此功能需要QDomElement而不是QXmppStanza。我在QXmppStanza中找到的唯一XML实现的函数及其派生类(除了parse(...))是函数

void toXml(QXmlStreamWriter *writer)

我还没有在qt中处理XML的经验,所以有没有比将XML写入字符串/ ByteArray更高效的方法,使用它作为输入来创建新的QDomElement并返回其documentElement?

2 个答案:

答案 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