XML到JSON使用属性进行转换

时间:2018-04-16 11:23:47

标签: javascript json xml

我正在尝试将XML转换为JSON。我正面临挑战我的xml将@attributes名称改为"值"在所有标签。虽然转换为xml到JSON我使用下面的代码。

var xml = "<Message><id value="123"></id><type value="Test"></type></Message>"
var json = XMLtoJSON(xml, ["type", "space", "xmlns", "html"]);
var result = JSON.stringify(json)    
function XMLtoJSON(xml, ignored) {
          var r, children = xml.*, attributes = xml.@*, length = children.length();
          if(length == 0) {
            r = xml.toString();
          } else if(length == 1) {
            var text = xml.text().toString();
            if(text) {
              r = text;
            }
          }
          if(r == undefined) { 
            r = {};
            for each (var child in children) {
             var name = child.localName();
             var json = XMLtoJSON(child, ignored);
             var value = r[name];
             if(value) {
               if(value.length) {
                 value.push(json);
               } else {
                 r[name] = [value, json]
               }
             } else {
               r[name] = json;
             }
            }
          }
          if(attributes.length()) {
            var a = {}, c = 0;
            for each (var attribute in attributes) {
              var name = attribute.localName();
              if(ignored && ignored.indexOf(name) == -1) {
                a["_" + name] = attribute.toString();
                c ++;
              }
            }
            if(c) {
              if(r) a._ = r;
              return a;
            }
          }

          return r;
        }

输入XML:

<Message><id value="123"></id><type value="Test"></type></Message>

实际输出:

{"id":{"_value":"123"},"type":{"_value":"Test"}}

预期产出:

{"id":"123","type":"Test"}

指导我缺少部分以获得预期的输出。

此致 nkn1189

1 个答案:

答案 0 :(得分:0)

你认为如果这样做会对你有用吗?

将该解析器的实际输出放到此函数中:

Session

因此,对于您的数组,将convertToExpectedOutput改为这样,它将给出预期的结果:

function convertToExpectedOutput(obj){
    var result = {}
    for (var i in obj){
        if (i == "_value")
           return obj[i];
        else
           result[i] = convertToExpectedOutput(obj[i])
    }
    return result;
}

convertToExpectedOutput(actualOutput)