【问题标题】:Convert JavaScript object (array) to XML将 JavaScript 对象(数组)转换为 XML
【发布时间】:2018-09-13 10:14:40
【问题描述】:

我有使用此代码格式化为 JSON 的 JavaScript 对象:

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"}....]

我想使用以下格式的正确元素标签将此对象转换为 XML:

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

我找到了一个转换对象的sn-p代码:

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 的任何建议?

【问题讨论】:

  • 嗨。我不想粗鲁,但您是否在寻求帮助之前先尝试调整 objectToXml 功能? :)
  • @Thomas Lombart - 我确实有,但我无法让它做我想做的事情:(

标签: javascript arrays json xml


【解决方案1】:

你可以用字符串模板做到这一点

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))

【讨论】:

  • 如果在代码 sn-p 运行器中执行,这将完美运行。但是,如果我将它嵌入 HMTL 并使用 document.write(toXml(data)); 运行它,我只会得到一堆零 0 0 0 0 0 0 0 0
  • 代替document.write,试试:document.body.textContent += toXml(data))
  • 这向我展示了转换后的字符串,这很棒,但也打印了整个 JS 脚本的内容 - 你知道我该如何抑制它吗?
  • 我的toXml函数只返回你要求生成的字符串,所以我不知道你在说什么“整个JS脚本”。
  • 抱歉,我的错是我缺乏清晰性 - 我将您的代码 sn-p 嵌入到一个 html 文件中,这样我就可以看到发生了什么。如果我使用document.body.textContent += toXml(data),我可以看到解析/转换后的字符串,这正是我所追求的,而且还可以看到 html 页面上的原始 JavaScript 代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 2021-01-15
  • 2021-06-19
  • 2017-11-13
相关资源
最近更新 更多