diff options
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppElement.cpp | 22 | ||||
| -rw-r--r-- | src/base/QXmppElement.h | 2 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/base/QXmppElement.cpp b/src/base/QXmppElement.cpp index cbb6d8bb..ecb88cad 100644 --- a/src/base/QXmppElement.cpp +++ b/src/base/QXmppElement.cpp @@ -25,6 +25,7 @@ #include "QXmppUtils.h" #include <QDomElement> +#include <QTextStream> class QXmppElementPrivate { @@ -41,7 +42,7 @@ public: QString name; QString value; - QDomElement source; + QByteArray serializedSource; }; QXmppElementPrivate::QXmppElementPrivate() @@ -50,7 +51,7 @@ QXmppElementPrivate::QXmppElementPrivate() } QXmppElementPrivate::QXmppElementPrivate(const QDomElement &element) - : counter(1), parent(NULL), source(element) + : counter(1), parent(NULL) { if (element.isNull()) return; @@ -80,6 +81,9 @@ QXmppElementPrivate::QXmppElementPrivate(const QDomElement &element) } childNode = childNode.nextSibling(); } + + QTextStream stream(&serializedSource); + element.save(stream, 0); } QXmppElementPrivate::~QXmppElementPrivate() @@ -126,9 +130,19 @@ QXmppElement &QXmppElement::operator=(const QXmppElement &other) return *this; } -const QDomElement &QXmppElement::sourceDomElement() const +QDomElement QXmppElement::sourceDomElement() const { - return d->source; + if (d->serializedSource.isEmpty()) + return QDomElement(); + + QDomDocument doc; + if (!doc.setContent(d->serializedSource, true)) + { + qWarning("[QXmpp] QXmppElement::sourceDomElement(): cannot parse source element"); + return QDomElement(); + } + + return doc.documentElement(); } QStringList QXmppElement::attributeNames() const diff --git a/src/base/QXmppElement.h b/src/base/QXmppElement.h index 346e7750..ac41b222 100644 --- a/src/base/QXmppElement.h +++ b/src/base/QXmppElement.h @@ -43,7 +43,7 @@ public: QXmppElement(const QDomElement &element); ~QXmppElement(); - const QDomElement &sourceDomElement() const; + QDomElement sourceDomElement() const; QStringList attributeNames() const; |
