csString GetNodeXML(csRef<iDocumentNode> node, bool childrenOnly) { psString xml; csRef<iDocumentNodeIterator> nodes; csRef<iDocumentAttributeIterator> attrs; if (!childrenOnly) xml.Format("<%s", node->GetValue()); attrs = node->GetAttributes(); while (attrs->HasNext()) { csRef<iDocumentAttribute> attr = attrs->Next(); csString escpxml = EscpXML(attr->GetValue()); xml.AppendFmt(" %s=\"%s\"", attr->GetName(), escpxml.GetData() ); } if (!childrenOnly) xml += ">"; nodes = node->GetNodes(); if (nodes->HasNext()) { while (nodes->HasNext()) { csRef<iDocumentNode> child = nodes->Next(); if (child->GetType() == CS_NODE_TEXT) { // add the node-content to the string..but escape special XML chars in it xml += EscpXML(child->GetContentsValue()); } else { xml += GetNodeXML(child); } } } if (!childrenOnly) { // add the node-content to the string..but escape special XML chars in it xml += EscpXML(node->GetContentsValue()); xml.AppendFmt("</%s>", node->GetValue()); } return xml; }