Fixed bug causing duplication of text content.
[shibboleth/cpp-xmltooling.git] / xmltooling / io / AbstractXMLObjectMarshaller.cpp
index 87e0087..0c87aff 100644 (file)
@@ -200,7 +200,7 @@ void AbstractXMLObjectMarshaller::marshallInto(
 #ifndef XMLTOOLING_NO_XMLSEC
     marshallContent(targetElement,credential);
     if (sigs) {
-        for_each(sigs->begin(),sigs->end(),bind2nd(mem_fun1<void,Signature,const Credential*>(&Signature::sign),credential));
+        for_each(sigs->begin(),sigs->end(),bind2nd(mem_fun1_t<void,Signature,const Credential*>(&Signature::sign),credential));
     }
 #else
     marshallContent(targetElement);
@@ -316,22 +316,22 @@ void AbstractXMLObjectMarshaller::marshallContent(
 {
     m_log.debug("marshalling text and child elements for XMLObject");
     
-    const XMLCh* val;
     unsigned int pos=0;
+    const XMLCh* val = getTextContent(pos);
+    if (val && *val)
+        domElement->appendChild(domElement->getOwnerDocument()->createTextNode(val));
+    
     const list<XMLObject*>& children=getOrderedChildren();
-    for (list<XMLObject*>::const_iterator i=children.begin(); i!=children.end(); ++i, ++pos) {
-        val = getTextContent(pos);
-        if (val && *val)
-            domElement->appendChild(domElement->getOwnerDocument()->createTextNode(val));
+    for (list<XMLObject*>::const_iterator i=children.begin(); i!=children.end(); ++i) {
         if (*i) {
 #ifndef XMLTOOLING_NO_XMLSEC
             (*i)->marshall(domElement,NULL,credential);
 #else
             (*i)->marshall(domElement);
 #endif
+            val = getTextContent(++pos);
+            if (val && *val)
+                domElement->appendChild(domElement->getOwnerDocument()->createTextNode(val));
         }
     }
-    val = getTextContent(pos);
-    if (val && *val)
-        domElement->appendChild(domElement->getOwnerDocument()->createTextNode(val));
 }