Возможно ли получить 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