Declarations should occur before anything else
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index a7c2b1c..cd03772 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -981,13 +981,23 @@
 

         XMLDeclaration* decl = node->ToDeclaration();

         if ( decl ) {

-                // A declaration can only be the first child of a document.

-                // Set error, if document already has children.

-                if ( !_document->NoChildren() ) {

-                        _document->SetError( XML_ERROR_PARSING_DECLARATION, decl->Value(), 0);

-                        DeleteNode( node );

+            // Declarations are only allowed at document level

+            bool wellLocated = ( ToDocument() != 0 );

+            if ( wellLocated ) {

+                // Multiple declarations are allowed but all declarations

+                // must occur before anything else

+                for ( const XMLNode* existingNode = _document->FirstChild(); existingNode; existingNode = existingNode->NextSibling() ) {

+                    if ( !existingNode->ToDeclaration() ) {

+                        wellLocated = false;

                         break;

+                    }

                 }

+            }

+            if ( !wellLocated ) {

+                _document->SetError( XML_ERROR_PARSING_DECLARATION, decl->Value(), 0 );

+                DeleteNode( node );

+                break;

+            }

         }

 

         XMLElement* ele = node->ToElement();