1

我编写了一个返回以下内容的 API

 <location><lat>41.47033705</lat><lon>-81.93612862</lon></location>
 <location><lat>41.470320224762</lat><lon>-81.9364535808563</lon></location>
 <location><lat>41.4704650640488</lat><lon>-81.9449239969254</lon></location>
 <location><lat>41.4780235290527</lat><lon>-81.8454140424728</lon></location>
 <location><lat>41.48597253</lat><lon>-81.82579113</lon></location>

我有一个 AJAX 调用可以得到这个,现在我需要在我的 JavaScript 中使用它。

最终我想和 2dArray [lat,lon]

最少的代码量是多少?

4

4 回答 4

2

假设响应是有效的 XML,您可以使用getElementsByTagName并推送到数组:

var arr = [];
for (var location in response.getElementsByTagName('location'))
{
    arr.push([
        parseFloat(location.getElementsByTagName('lat')[0]), 
        parseFloat(location.getElementsByTagName('lon')[0])
    ]);
}
于 2013-08-20T00:53:34.173 回答
1

正则表达式 101 演示

正则表达式

<lat>([^<]+)<\/lat><lon>([^<]+)<\/lon>

使用g全局)标志

描述

<lat> Literal <lat>
1st Capturing group ([^<]+) 
    Negated char class [^<] 1 to infinite times [greedy] matches any character except:
        < The character <
<\/lat><lon> Literal </lat><lon>
2nd Capturing group ([^<]+) 
    Negated char class [^<] 1 to infinite times [greedy] matches any character except:
        < The character <
<\/lon> Literal </lon>

g modifier: global. All matches (don't return on first match)

可视化

正则表达式可视化


采取上述措施来解决您的具体问题

演示jsFiddle

JS

var text = " <location><lat>41.47033705</lat><lon>-81.93612862</lon></location><location><lat>41.470320224762</lat><lon>-81.9364535808563</lon></location><location><lat>41.4704650640488</lat><lon>-81.9449239969254</lon></location><location><lat>41.4780235290527</lat><lon>-81.8454140424728</lon></location><location><lat>41.48597253</lat><lon>-81.82579113</lon></location>";

var myregexp = /<lat>([^<]+)<\/lat><lon>([^<]+)<\/lon>/g;
var results = new Array();
var match = myregexp.exec(text);
while (match != null) {
    var result = new Array();
    for (var i = 1; i < match.length; i++) {
        result.push(match[i]);
    }
    results.push(result);
    match = myregexp.exec(text);
}

console.log(results);

该变量results包含一个二维数组 [lat, lon]

于 2013-08-20T02:32:24.163 回答
1

只需使用 JQuery 的选择器引擎来解析您的代码。

将您的元素包裹在一个<div id="data"> ... </data>便于选择中,您可以执行以下操作:

var _locations = $('#data').find('location');
var my_data = [];

$.each(_locations, function(index, loc) {
    var _lat = $(loc).find('lat');
    var _lon = $(loc).find('lon');

    my_data.push([_lat.text(), _lon.text()]);
})

// my_data will contain a 2D array of your lat, lon

祝你好运

-基鲁

于 2013-08-20T00:54:04.363 回答
0

您可以通过 XmlHttmlRequest 进行 AJAX 调用并获取 responseXML。然后您可以通过 XmlDocument 方法和属性解析您的数据。

您甚至可以对结果运行Xpath 查询以准确选择您需要的内容。

于 2013-08-20T00:50:42.753 回答