From 5d80e03436563d90997ba2f933ca123f70364ea9 Mon Sep 17 00:00:00 2001 From: "aaronr%us.ibm.com" Date: Wed, 26 Jul 2006 23:25:20 +0000 Subject: [PATCH] [XForms] Submission is leaving off document level pi and comments. Bug 344621, patch by sspeiche, r=doronr+olli git-svn-id: svn://10.0.0.236/trunk@203785 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xforms/nsXFormsSubmissionElement.cpp | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/mozilla/extensions/xforms/nsXFormsSubmissionElement.cpp b/mozilla/extensions/xforms/nsXFormsSubmissionElement.cpp index 65a1ec9b6e6..213ce3f3e60 100644 --- a/mozilla/extensions/xforms/nsXFormsSubmissionElement.cpp +++ b/mozilla/extensions/xforms/nsXFormsSubmissionElement.cpp @@ -1186,20 +1186,33 @@ nsXFormsSubmissionElement::CreatePurgedDoc(nsIDOMNode *source, } // recursively walk the source document, copying nodes as appropriate - nsCOMPtr startNode; - // if it is a document, get the root element - if (sourceDoc) { - nsCOMPtr elm; - sourceDoc->GetDocumentElement(getter_AddRefs(elm)); - startNode = elm; - } else { - startNode = source; - } - nsCOMPtr model = GetModel(); NS_ENSURE_STATE(model); - nsresult rv = CopyChildren(model, startNode, doc, doc, cdataElements, 0); - NS_ENSURE_SUCCESS(rv, rv); + nsresult rv = NS_OK; + // if it is a document, get the root element + if (sourceDoc) { + // Iterate over document child nodes to preserve document level + // processing instructions and comment nodes. + nsCOMPtr curDocNode, node, destChild; + sourceDoc->GetFirstChild(getter_AddRefs(curDocNode)); + PRUint16 type; + while (curDocNode) { + curDocNode->GetNodeType(&type); + if (type == nsIDOMNode::ELEMENT_NODE) { + rv = CopyChildren(model, curDocNode, doc, doc, cdataElements, 0); + NS_ENSURE_SUCCESS(rv, rv); + } else { + doc->ImportNode(curDocNode, PR_FALSE, getter_AddRefs(destChild)); + doc->AppendChild(destChild, getter_AddRefs(node)); + } + + curDocNode->GetNextSibling(getter_AddRefs(node)); + curDocNode.swap(node); + } + } else { + rv = CopyChildren(model, source, doc, doc, cdataElements, 0); + NS_ENSURE_SUCCESS(rv, rv); + } NS_ADDREF(*result = doc); return NS_OK;