diff options
Diffstat (limited to 'src/QXmppUtils.cpp')
| -rw-r--r-- | src/QXmppUtils.cpp | 36 |
1 files changed, 35 insertions, 1 deletions
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 <QCryptographicHash> #include <QDateTime> #include <QDebug> +#include <QDomElement> #include <QRegExp> #include <QString> +#include <QStringList> #include <QXmlStreamWriter> #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)); |
