diff --git "a/C:\\Users\\jmo\\AppData\\Local\\Temp\\TortoiseGit\\qxmlstream-5d276d6.001.cpp" "b/D:\\qt512\\qt5\\qtbase\\src\\corelib\\serialization\\qxmlstream.cpp" index 827996ee2d..6f1c3b1d15 100644 --- "a/C:\\Users\\jmo\\AppData\\Local\\Temp\\TortoiseGit\\qxmlstream-5d276d6.001.cpp" +++ "b/D:\\qt512\\qt5\\qtbase\\src\\corelib\\serialization\\qxmlstream.cpp" @@ -3001,6 +3001,7 @@ public: #endif void checkIfASCIICompatibleCodec(); + NamespaceDeclaration &addExtraNamespace(const QString &namespaceUri, const QString &prefix); NamespaceDeclaration &findNamespace(const QString &namespaceUri, bool writeDeclaration = false, bool noDefault = false); void writeNamespaceDeclaration(const NamespaceDeclaration &namespaceDeclaration); @@ -3197,6 +3198,16 @@ bool QXmlStreamWriterPrivate::finishStartElement(bool contents) return hadSomethingWritten; } +QXmlStreamPrivateTagStack::NamespaceDeclaration & QXmlStreamWriterPrivate::addExtraNamespace(const QString &namespaceUri, const QString &prefix) +{ + Q_ASSERT(!((prefix == QLatin1String("xml")) ^ (namespaceUri == QLatin1String("http://www.w3.org/XML/1998/namespace")))); + Q_ASSERT(namespaceUri != QLatin1String("http://www.w3.org/2000/xmlns/")); + QXmlStreamWriterPrivate::NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push(); + namespaceDeclaration.prefix = addToStringStorage(prefix); + namespaceDeclaration.namespaceUri = addToStringStorage(namespaceUri); + return namespaceDeclaration; +} + QXmlStreamPrivateTagStack::NamespaceDeclaration &QXmlStreamWriterPrivate::findNamespace(const QString &namespaceUri, bool writeDeclaration, bool noDefault) { for (int j = namespaceDeclarations.size() - 1; j >= 0; --j) { @@ -3767,11 +3778,7 @@ void QXmlStreamWriter::writeNamespace(const QString &namespaceUri, const QString if (prefix.isEmpty()) { d->findNamespace(namespaceUri, d->inStartElement); } else { - Q_ASSERT(!((prefix == QLatin1String("xml")) ^ (namespaceUri == QLatin1String("http://www.w3.org/XML/1998/namespace")))); - Q_ASSERT(namespaceUri != QLatin1String("http://www.w3.org/2000/xmlns/")); - QXmlStreamWriterPrivate::NamespaceDeclaration &namespaceDeclaration = d->namespaceDeclarations.push(); - namespaceDeclaration.prefix = d->addToStringStorage(prefix); - namespaceDeclaration.namespaceUri = d->addToStringStorage(namespaceUri); + QXmlStreamWriterPrivate::NamespaceDeclaration &namespaceDeclaration = d->addExtraNamespace(namespaceUri, prefix); if (d->inStartElement) d->writeNamespaceDeclaration(namespaceDeclaration); } @@ -3958,13 +3965,14 @@ void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader) writeEndDocument(); break; case QXmlStreamReader::StartElement: { - writeStartElement(reader.namespaceUri().toString(), reader.name().toString()); + Q_D(QXmlStreamWriter); QXmlStreamNamespaceDeclarations namespaceDeclarations = reader.namespaceDeclarations(); for (int i = 0; i < namespaceDeclarations.size(); ++i) { const QXmlStreamNamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(i); - writeNamespace(namespaceDeclaration.namespaceUri().toString(), + d->addExtraNamespace(namespaceDeclaration.namespaceUri().toString(), namespaceDeclaration.prefix().toString()); } + writeStartElement(reader.namespaceUri().toString(), reader.name().toString()); writeAttributes(reader.attributes()); } break; case QXmlStreamReader::EndElement: