Keep indentation control fully inside the XMLPrinter. You'll have to subclass it to override its standard behaviour by overwriting CompactMode().
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 5117986..beaeeb8 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -1323,7 +1323,6 @@
 	else if( !FirstChild() ) {

 		theBoolElem = GetDocument()->NewElement( inBool ? "true" : "false" );

 		InsertFirstChild( theBoolElem );

-		SetForceCompactMode(true);

 	}

 }

 

@@ -2190,7 +2189,9 @@
 

 bool XMLPrinter::VisitEnter( const XMLElement& element, const XMLAttribute* attribute )

 {

-    OpenElement( element.Name(), _compactMode ? true : element.Parent()->GetForceCompactMode() );

+	const XMLElement*	parentElem = element.Parent()->ToElement();

+	bool		compactMode = parentElem ? CompactMode(*parentElem) : _compactMode;

+    OpenElement( element.Name(), compactMode );

     while ( attribute ) {

         PushAttribute( attribute->Name(), attribute->Value() );

         attribute = attribute->Next();

@@ -2201,7 +2202,7 @@
 

 bool XMLPrinter::VisitExit( const XMLElement& element )

 {

-    CloseElement( _compactMode ? true : element.GetForceCompactMode() );

+    CloseElement( CompactMode(element) );

     return true;

 }