From 84ebb6f53158f11a446bd9e2fd7ac78db96d3d74 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Thu, 19 Aug 2010 15:04:28 +0000 Subject: QXmppUtils: add method for serialising a QDomElement --- src/QXmppUtils.cpp | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src/QXmppUtils.cpp') diff --git a/src/QXmppUtils.cpp b/src/QXmppUtils.cpp index 49de22dd..4f8b84f2 100644 --- a/src/QXmppUtils.cpp +++ b/src/QXmppUtils.cpp @@ -1,8 +1,9 @@ /* * Copyright (C) 2008-2010 The QXmpp developers * - * Author: + * Authors: * Manjeet Dahiya + * Jeremy Lainé * * Source: * http://code.google.com/p/qxmpp @@ -27,8 +28,10 @@ #include #include #include +#include #include #include +#include #include #include "QXmppUtils.h" @@ -218,6 +221,37 @@ void helperToXmlAddAttribute(QXmlStreamWriter* stream, const QString& name, stream->writeAttribute(name,value); } +void helperToXmlAddDomElement(QXmlStreamWriter* stream, const QDomElement& element, const QStringList &omitNamespaces) +{ + stream->writeStartElement(element.tagName()); + + /* attributes */ + QString xmlns = element.namespaceURI(); + if (!xmlns.isEmpty() && !omitNamespaces.contains(xmlns)) + stream->writeAttribute("xmlns", xmlns); + QDomNamedNodeMap attrs = element.attributes(); + for (int i = 0; i < attrs.size(); i++) + { + QDomAttr attr = attrs.item(i).toAttr(); + stream->writeAttribute(attr.name(), attr.value()); + } + + /* children */ + QDomNode childNode = element.firstChild(); + while (!childNode.isNull()) + { + if (childNode.isElement()) + { + helperToXmlAddDomElement(stream, childNode.toElement(), QStringList() << xmlns); + } else if (childNode.isText()) { + stream->writeCharacters(childNode.toText().data()); + } + childNode = childNode.nextSibling(); + } + stream->writeEndElement(); +} + + void helperToXmlAddNumberElement(QXmlStreamWriter* stream, const QString& name, int value) { stream->writeTextElement( name, QString::number(value)); -- cgit v1.2.3