Javascript js从JSP解析XML,存储值
我正在解析XML,并希望以易于阅读的方式存储这些值 我得到了地图形状和地图点(x和y坐标)。(x,y)对形成一个点,点的集合形成一个形状 下面是我想解析的一些XML示例:Javascript js从JSP解析XML,存储值,javascript,jquery,xml,arrays,Javascript,Jquery,Xml,Arrays,我正在解析XML,并希望以易于阅读的方式存储这些值 我得到了地图形状和地图点(x和y坐标)。(x,y)对形成一个点,点的集合形成一个形状 下面是我想解析的一些XML示例: <?xml version='1.0'?> <mapQuery id='10918014'> <mapShape id='429436'> <mapPoint id='4259799'> <x>-81.61508<
<?xml version='1.0'?>
<mapQuery id='10918014'>
<mapShape id='429436'>
<mapPoint id='4259799'>
<x>-81.61508</x>
<y>41.52184</y>
</mapPoint>
<mapPoint id='4259800'>
<x>-81.61537</x>
<y>41.52181</y>
</mapPoint>
<mapPoint id='4259801'>
<x>-81.61538</x>
<y>41.522198</y>
</mapPoint>
<mapPoint id='4259802'>
<x>-81.61516</x>
<y>41.52222</y>
</mapPoint>
<mapPoint id='4259803'>
<x>-81.61508</x>
<y>41.52184</y>
</mapPoint>
</mapShape>
</mapQuery>
(此示例XML仅显示一个形状,但可能有多个形状。)
提前感谢您的帮助,提出了一个简单的问题=)
以下是一些基本代码:
shapeXmlHandler : function(xml){
$(xml).find("mapShape").each(function(){
$(this).find("mapPoint").each(function() {
console.log('mapPoint: '+$(this).attr('id'));
console.log('x :'+$(this).find("x").text());
console.log('y :'+$(this).find("y").text());
});
});
}
尝试使用
这个日志应该是这样的
[
[
{x: -81.61508, y: 41.52184},
{x: -81.61537, y: 41.52181},
...
]
]
这可以通过使用而不是
。each()
:
如果有机会使用JSON而不是XML,您根本不需要任何自定义解析代码!使用即可。您有什么问题?到目前为止看起来不错(除了我认为您实际上想要
形状[0]。点[0]。x=第一个x点
等)打得不错。我真的不确定如何实现这个目标,但我已经很接近了。我真的不知道在解析xml数据时将其放入数组的最佳方法是什么,所以我想征求一些建议。非常感谢您的全面回答。如果可以的话,我会给你两张赞成票谢谢,不用担心。您最终使用了哪种方法?对于.map(),是否需要.get()?除非关闭.get(),否则我不会得到任何控制台输出,但它显示的内容远不止数组(像所有类型的jQuery方法)。我可能正在使用第一种方法——它仍然不确定我是否需要将输入保持太长时间,所以我可能在处理时传递它,这取决于您希望对输出做什么。在大多数情况下,您需要使用.get()
,因此您使用的是一个简单的普通JavaScript数组,而不是jQuery对象。.map()
之后的.get()
调用是惯用的jQuery。也就是说,像这样嵌套的.map()
调用可能会忽略内部的.get()
调用。我还没有玩弄它来为自己找到答案。
shapeXmlHandler : function(xml)
{
var shapes = [];
$(xml).find('mapShape').each(function()
{
var shape = [];
$(this).find('mapPoint').each(function()
{
var $p = $(this),
point =
{
x: $p.find('x').text(),
y: $p.find('y').text()
};
shape.push(point);
});
shapes.push(shape);
});
console.log(shapes);
}
[
[
{x: -81.61508, y: 41.52184},
{x: -81.61537, y: 41.52181},
...
]
]
shapeXmlHandler : function(xml)
{
var shapes = $(xml).find('mapShape').map(function()
{
return $(this).find('mapPoint').map(function()
{
var $p = $(this);
return {
x: $p.find('x').text(),
y: $p.find('y').text()
};
}).get();
}).get();
console.log(shapes);
}