From 220c8771ec8948ef80d115e828ccd7bf28126bcc Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Thu, 30 Dec 2010 08:52:48 +0000 Subject: Make XML serialization logic portable across browsers. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1053823 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/modules/js/htdocs/xmlutil.js | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'sca-cpp/trunk/modules/js/htdocs/xmlutil.js') diff --git a/sca-cpp/trunk/modules/js/htdocs/xmlutil.js b/sca-cpp/trunk/modules/js/htdocs/xmlutil.js index 1bec45f9b9..0edaf400af 100644 --- a/sca-cpp/trunk/modules/js/htdocs/xmlutil.js +++ b/sca-cpp/trunk/modules/js/htdocs/xmlutil.js @@ -129,9 +129,6 @@ function readXML(l) { return readXMLDocument(parseXML(l)); } -/** - * Make an XML document. - */ /** * Return a list of strings representing an XML document. */ @@ -153,27 +150,49 @@ function expandElementValues(n, l) { function writeList(l, node, doc) { if (isNil(l)) return node; + var token = car(l); if (isTaggedList(token, attribute)) { node.setAttribute(attributeName(token).substring(1), '' + attributeValue(token)); + } else if (isTaggedList(token, element)) { + + function mkelem(tok, doc) { + function xmlns(l) { + if (isNil(l)) + return null; + var t = car(l); + if (isTaggedList(t, attribute)) { + if (attributeName(t).substring(1) == 'xmlns') + return attributeValue(t); + } + return xmlns(cdr(l)); + } + + var ns = xmlns(elementChildren(tok)); + if (ns == null || !doc.createElementNS) + return doc.createElement(elementName(tok).substring(1)); + return doc.createElementNS(ns, elementName(tok).substring(1)); + } + if (elementHasValue(token)) { var v = elementValue(token); if (isList(v)) { var e = expandElementValues(elementName(token), v); writeList(e, node, doc); } else { - var child = doc.createElement(elementName(token).substring(1)); + var child = mkelem(token, doc); writeList(elementChildren(token), child, doc); node.appendChild(child); } } else { - var child = doc.createElement(elementName(token).substring(1)); + var child = mkelem(token, doc); writeList(elementChildren(token), child, doc); node.appendChild(child); } } else node.appendChild(doc.createTextNode('' + token)); + writeList(cdr(l), node, doc); return node; } -- cgit v1.2.3