使用javascript将JSON对象转换为XML

时间:2011-11-23 11:32:05

标签: javascript xml json

我想将JSON对象转换为XML String,但我无法找到合适的方法。 我在https://gist.github.com/c4milo/3738875找到了一个名为json2xml的简洁小jQuery插件,但它没有逃脱数据。

如何正确转义数据,以便浏览器的XML解析器能够正常工作?

4 个答案:

答案 0 :(得分:2)

您可以尝试这个小型库http://code.google.com/p/x2js/

答案 1 :(得分:1)

没有独特的方法可以做到这一点。您应该只使用带有模式的XML,而JSON没有这样的模式。天真地做任何这样的转变都可能会破裂。

为什么不直接使用XML或JSON?

答案 2 :(得分:1)

您可以使用谷歌名为x2js.js

的外部js

你可以在这里看到演示。

jsFiddle Demo

答案 3 :(得分:0)

您可以在代码中使用此函数将js中的JSON转换为XML

var json2xml =函数(o){

            var tab = "\t";
            var toXml = function (v, name, ind) {
                var xml = "";
                if (v instanceof Array) {
                    for (var i = 0, n = v.length; i < n; i++)
                        xml += ind + toXml(v[i], name, ind + "\t") + "\n";
                }
                else if (typeof (v) == "object") {
                    var hasChild = false;
                    xml += ind + "<" + name;
                    for (var m in v) {
                        if (m.charAt(0) == "@")
                            xml += " " + m.substr(1) + "=\"" + v[m].toString() + "\"";
                        else
                            hasChild = true;
                    }
                    xml += hasChild ? ">" : "/>";
                    if (hasChild) {
                        for (var m in v) {
                            if (m == "#text")
                                xml += v[m];
                            else if (m == "#cdata")
                                xml += "<![CDATA[" + v[m] + "]]>";
                            else if (m.charAt(0) != "@")
                                xml += toXml(v[m], m, ind + "\t");
                        }
                        xml += (xml.charAt(xml.length - 1) == "\n" ? ind : "") + "</" + name + ">";
                    }
                }
                else {
                    xml += ind + "<" + name + ">" + v.toString() + "</" + name + ">";
                }
            }
            return xml;
        };

您将获得XML DOM作为回报,因此您需要序列化

所以主要

            var xmlDOM = json2xml(eval(jsonObj));
            var oSerializer = new XMLSerializer();
            var sXML = oSerializer.serializeToString(xmlDOM);