代码之家  ›  专栏  ›  技术社区  ›  Huskie69

将JavaScript对象(数组)转换为XML

  •  0
  • Huskie69  · 技术社区  · 6 年前

    obj.push({      
        lat: (lat / 1e5).toFixed(5),
        lon: (lon / 1e5).toFixed(5),
        ele: "0"
    });
    

    此对象/数组可能包含成百上千个单独的对象/属性,如下所示:

     [{"lat":"32.71883","lon":"-16.76118","ele":"0"},{"lat":"32.71882","lon":"-16.76138","ele":"0"},{"lat":"32.71881","lon":"-16.76159","ele":"0"},{"lat":"32.71880","lon":"-16.76179","ele":"0"},{"lat":"32.71879","lon":"-16.76199","ele":"0"},{"lat":"32.71878","lon":"-16.76220","ele":"0"}....]
    

    <trkpt lat="32.7188300" lon="-16.7611800">   // note how this lumps together two separate properties into a single element
     <ele>0</ele>
    </trkpt>
    

    function objectToXml(object) {
            var xml = '';
            for (var prop in object) {
                if (!object.hasOwnProperty(prop)) {
                    continue;
                }
                if (object[prop] == undefined)
                    continue;
                xml += "<" + prop + ">";
                if (typeof object[prop] == "object")
                    xml += objectToXml(new Object(object[prop]));
                else
                    xml += object[prop];
                xml += "<!--" + prop + "--\>";
            }
            return xml;
        }
    

    这当然会在某种程度上转换对象,但是,它会尝试为每个属性集创建一个键,并将属性连接到一个字符串中。

      <0>32.71883-16.761180<1>32.71882-16.761380<2>32.71881-16.761590<3>32.71880-16.761790<4>.....
    

    关于如何使用此函数正确格式化所描述的XML,有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   mpm    6 年前

    const data = [{
      "lat": "32.71883",
      "lon": "-16.76118",
      "ele": "0"
    }, {
      "lat": "32.71882",
      "lon": "-16.76138",
      "ele": "0"
    }, {
      "lat": "32.71881",
      "lon": "-16.76159",
      "ele": "0"
    }, {
      "lat": "32.71880",
      "lon": "-16.76179",
      "ele": "0"
    }, {
      "lat": "32.71879",
      "lon": "-16.76199",
      "ele": "0"
    }, {
      "lat": "32.71878",
      "lon": "-16.76220",
      "ele": "0"
    }]
    
    
    
    const toXml = (data) => {
      return data.reduce((result, el) => {
       return result + `<trkpt lat="${el.lat}" lon="${el.lon}"><ele>${el.ele}</ele></trkpt>\n`
      }, '')
    }
    
    console.log(toXml(data))