如何使用 JQuery 解析带有名称空间的 xml(并且适用于所有浏览器 ..)?
Posted
技术标签:
【中文标题】如何使用 JQuery 解析带有名称空间的 xml(并且适用于所有浏览器 ..)?【英文标题】:How to parse xml with namespaces using JQuery (and working for all browser .. )? 【发布时间】:2014-09-25 04:02:27 【问题描述】:我需要使用 JQuery 解析来自 Web 服务的 XML 响应
http://code.jquery.com/jquery-1.11.0.min.js
这是我的 XML 示例
<?xml version='1.0' encoding="ISO-8859-1" ?>
<wfs:FeatureCollection
xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:gml="http://www.opengis.net/gml"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd
http://mapserver.gis.umn.edu/mapserver http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/wfs/Numeri_Civici_2012.map&SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureType&TYPENAME=IN.NUMERICIVICI.2012&OUTPUTFORMAT=XMLSCHEMA">
<gml:boundedBy>
<gml:Box srsName="EPSG:4326">
<gml:coordinates>7.700007,44.802147 7.749396,44.849996</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<gml:featureMember>
<ms:IN.NUMERICIVICI.2012 fid="IN.NUMERICIVICI.2012.2728384">
<gml:boundedBy>
<gml:Box srsName="EPSG:4326">
<gml:coordinates>7.735138,44.810267 7.735138,44.810267</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<ms:boundary>
<gml:Point srsName="EPSG:4326">
<gml:coordinates>7.735138,44.810267</gml:coordinates>
</gml:Point>
</ms:boundary>
<ms:id>13800026457291</ms:id>
<ms:nome>Borgata Tetti Sotto</ms:nome>
<ms:civico>16</ms:civico>
<ms:istat>01004041</ms:istat>
<ms:cap>12030</ms:cap>
<ms:comune>CARAMAGNA PIEMONTE</ms:comune>
<ms:nome_ted> </ms:nome_ted>
<ms:provincia>CUNEO</ms:provincia>
<ms:regione>PIEMONTE</ms:regione>
</ms:IN.NUMERICIVICI.2012>
</gml:featureMember>
<gml:featureMember>
<ms:IN.NUMERICIVICI.2012 fid="IN.NUMERICIVICI.2012.2736621">
<gml:boundedBy>
<gml:Box srsName="EPSG:4326">
<gml:coordinates>7.735397,44.812403 7.735397,44.812403</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<ms:boundary>
<gml:Point srsName="EPSG:4326">
<gml:coordinates>7.735397,44.812403</gml:coordinates>
</gml:Point>
</ms:boundary>
<ms:id>13800026457290</ms:id>
<ms:nome>Borgata Tetti Sotto</ms:nome>
<ms:civico>25</ms:civico>
<ms:istat>01004041</ms:istat>
<ms:cap>12030</ms:cap>
<ms:comune>CARAMAGNA PIEMONTE</ms:comune>
<ms:nome_ted> </ms:nome_ted>
<ms:provincia>CUNEO</ms:provincia>
<ms:regione>PIEMONTE</ms:regione>
</ms:IN.NUMERICIVICI.2012>
</gml:featureMember>
我必须在一些js变量中提取这些字段:
ms:nome ms:公民 ms:istat 毫秒:上限 ms:comune我还需要确保我的代码可以在 IE、Firefox 和 Chrome 上正常运行。
我已经看到并尝试了几种我在 SO 中找到的解决方案,但都没有奏效。
非常感谢任何建议!
非常感谢您!
切萨雷
【问题讨论】:
【参考方案1】:正确的解决方案显示为这个问题的答案
Parse xml with namespaces using JQuery and working for all browser ..
它现在可以在 IE、FF 和 Chrome 上运行!
我希望这对其他人有用。
切萨雷
【讨论】:
【参考方案2】:您可以使用 jQuery 和 find()
遍历 XML 元素,就像使用 html 一样。指定要选择的标签名称时,需要省略选择器中的命名空间前缀。
var xmlText = $('#featureData').text(),
$xmlData = $.parseXML(xmlText),
$features = $('featureMember', $xmlData),
extractedFeatures = [];
$features.each(function ()
var $this = $(this),
feature = ,
items = [
'nome',
'civico',
'istat',
'cap',
'comune'
],
item;
for (var i = 0; i < items.length; i++)
item = items[i];
feature[item] = $this.find(item).text();
extractedFeatures.push(feature);
);
$('#output').text(JSON.stringify(extractedFeatures));
See the jsFiddle reproduction here
【讨论】:
嗨!我试过但它似乎只在 Chrome 中工作,而不是在 Firefox 和 IE 中。是否可以将值不是放在 json 结构中,而是放在一些单独的 javascript 变量/值数组中?我是 JQuery 的新手,很抱歉这个问题很糟糕...... :-)以上是关于如何使用 JQuery 解析带有名称空间的 xml(并且适用于所有浏览器 ..)?的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery 从 asp.net webservice 解析简单的 xml