Javascript—解析自定义标记的最佳方法
我编写了一个API,它返回以下内容Javascript—解析自定义标记的最佳方法,javascript,ajax,parsing,Javascript,Ajax,Parsing,我编写了一个API,它返回以下内容 <location><lat>41.47033705</lat><lon>-81.93612862</lon></location> <location><lat>41.470320224762</lat><lon>-81.9364535808563</lon></location> <location&g
<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>
41.47033705-81.93612862
41.470320224762-81.9364535808563
41.4704650640488-81.9449239969254
41.4780235290527-81.8454140424728
41.48597253-81.82579113
我有一个AJAX调用,可以得到这个结果,现在我需要在JavaScript中使用它
最终,我想要2dArray[lat,lon]
执行此操作所需的最少代码量是多少 您可以通过XmlHttmlRequest进行AJAX调用并获取responseXML。然后可以通过XmlDocument方法和属性解析数据
您甚至可以运行结果来选择所需的内容。假设响应是有效的XML,您可以使用
getElementsByTagName
并推送到一个数组:
var arr = [];
for (var location in response.getElementsByTagName('location'))
{
arr.push([
parseFloat(location.getElementsByTagName('lat')[0]),
parseFloat(location.getElementsByTagName('lon')[0])
]);
}
只需使用JQuery的选择器引擎来解析代码 将元素包装在
中代码>便于选择,您可以执行以下操作:
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
祝你好运
-基鲁
Regex
<lat>([^<]+)<\/lat><lon>([^<]+)<\/lon>
可视化
采取上述措施来解决您的具体问题
演示
JS
var text=“41.47033705-81.9361286241.470320224762-81.936453580856341.4704650640488-81.944923996925441.4780235290527-81.845414042472841.48597253-81.82579113”;
var myregexp=/([^A正则表达式。这就是为什么我没有尝试它。您使用jquery吗?@abc123在本例中假设这只是JavaScript和Ajax。@AMR您的XML定义良好,因此可以安全地执行正则表达式。这是我创建的所有自定义标记。它将是标准的,而且永远不会很好地工作。如果没有根标记,它将是无效的XML。@AMR--是的,那很好。Javascript可以在通过Ajax返回的无模式XML文档上使用DOM。@McGarnagle顺便说一句,你刚刚让我大吃一惊,在数组中添加了没有大小的内容……用户声明没有jquery。。。
<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)
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);