Возможно ли получить QDomElement из QXmlStreamWriter?

Я пишу небольшой XMPP-сервер, используя qxmpp. Теперь я хочу создать QXmppStanza и представить его (как если бы клиент отправил его) на сервер, а мои плагины используют

void QXmppServer::handleElement(const QDomElement &element)

Эта функция требует QDomElement, а не QXmppStanza. Единственная реализованная в XML функция, которую я нашел в QXmppStanza и его производных классах (кроме parse(...)), - это функция

void toXml(QXmlStreamWriter *writer)

У меня пока нет опыта работы с XML в qt, так есть ли более эффективный способ, чем запись XML в строку /ByteArray, использование его в качестве входных данных для создания нового QDomElement и возврата его documentElement?

2 ответа

Решение

После некоторых дальнейших исследований я должен признать, что это невозможно.

Как указано в документации QDomDocument, мне всегда требуется QDomDocument для работы с QDomElement (и другими узлами):

Поскольку элементы, текстовые узлы, комментарии, инструкции по обработке и т. Д. Не могут существовать вне контекста документа (...)

QXmlStreamWriter не имеет QDomDocument, поэтому мне действительно нужно создать QDomDocument (который, конечно, должен жить столько, сколько я хочу работать с элементом), а затем проанализировать текст (QDomDocument::setContent).

У меня была похожая проблема, и я смог преобразовать поток в элемент 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
Другие вопросы по тегам