Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript—解析自定义标记的最佳方法_Javascript_Ajax_Parsing - Fatal编程技术网

Javascript—解析自定义标记的最佳方法

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

我编写了一个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>
41.47033705-81.93612862
41.470320224762-81.9364535808563
41.4704650640488-81.9449239969254
41.4780235290527-81.8454140424728
41.48597253-81.82579113
我有一个AJAX调用,可以得到这个结果,现在我需要在JavaScript中使用它

最终,我想要2d
Array[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);