Javascript 使用JQuery解析带有名称空间的xml,并适用于所有浏览器。。

Javascript 使用JQuery解析带有名称空间的xml,并适用于所有浏览器。。,javascript,jquery,xml,xml-parsing,Javascript,Jquery,Xml,Xml Parsing,我正在尝试使用jQuery1.11解析来自服务的XML响应 目前我的代码只能在Chrome上运行,不能在IE或Firefox上运行,我需要它能在所有“现代”浏览器上运行 这是我的XML示例 <?xml version='1.0' encoding="ISO-8859-1" ?> <wfs:FeatureCollection xmlns:ms="http://mapserver.gis.umn.edu/mapserver" xmlns:wfs="http://www.

我正在尝试使用jQuery1.11解析来自服务的XML响应

目前我的代码只能在Chrome上运行,不能在IE或Firefox上运行,我需要它能在所有“现代”浏览器上运行

这是我的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&amp;SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=IN.NUMERICIVICI.2012&amp;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>

7.700007,44.802147 7.749396,44.849996
7.735138,44.810267 7.735138,44.810267
7.735138,44.810267
13800026457291
博尔加塔特提索托酒店
16
01004041
12030
卡拉马格纳皮埃蒙特酒店
库内奥
皮埃蒙特
7.735397,44.812403 7.735397,44.812403
7.735397,44.812403
13800026457290
博尔加塔特提索托酒店
25
01004041
12030
卡拉马格纳皮埃蒙特酒店
库内奥
皮埃蒙特

这是我的密码

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));
var xmlText=$('#featureData').text(),
$xmlData=$.parseXML(xmlText),
$features=$('featureMember',$xmlData),
extractedFeatures=[];
$features.每个(函数(){
变量$this=$(this),
功能={},
项目=[
“诺姆”,
“公民”,
“istat”,
"上限",,
“科穆尼”
],
项目;
对于(变量i=0;i
所以你可以试试

有什么建议或解决办法吗?提前非常感谢你


Cesare

您必须小心使用名称空间。。。如果使用具有某些名称空间声明的XML,则必须记住它并构建适当的选择器

例如:

$features = $('gml\\:featureMember, featureMember', $xmlData),

请看一下更新。现在它也可以在FF和IE中使用。

您必须小心使用名称空间。。。如果使用具有某些名称空间声明的XML,则必须记住它并构建适当的选择器

例如:

$features = $('gml\\:featureMember, featureMember', $xmlData),

请看一下更新。现在它在FF和IE中也能工作。

这对我来说不起作用,但我在这里找到了一个可行的解决方案:

在上面的页面中,我们可以找到:

$(xml).find('ns1\\:ld_det, ld_det');
其中,“ns1”是名称空间,如gml,“ld_let”是节点名


它在Google Chrome中也能工作。

这对我来说不起作用,但我在这里找到了一个可行的解决方案:

在上面的页面中,我们可以找到:

$(xml).find('ns1\\:ld_det, ld_det');
其中,“ns1”是名称空间,如gml,“ld_let”是节点名


而且它在Google Chrome中也能工作。

如果有人在MS Edge browser中使用名称空间解析XML时遇到问题,下面是解决方法:

$.fn.filterNodeByPrefix = function(prefix) {
    return this.filter(function() {
        return this.prefix === prefix;
    });
};
我们可以将此功能用作:

$('gml\\:featureMember, featureMember', $xmlData).filterNodeByPrefix('gml');

在Chrome、FF、IE和MS Edge中进行了尝试和测试。

如果有人在MS Edge浏览器中使用名称空间解析XML时遇到问题,以下是解决方法:

$.fn.filterNodeByPrefix = function(prefix) {
    return this.filter(function() {
        return this.prefix === prefix;
    });
};
我们可以将此功能用作:

$('gml\\:featureMember, featureMember', $xmlData).filterNodeByPrefix('gml');

在Chrome、FF、IE和MS Edge中进行了尝试和测试。

我需要一份附录。。。在原始示例XML 7.735138,44.810267中,我必须使用哪个符号来提取坐标值,非常感谢!我需要一份附录。。。在原始示例XML 7.735138,44.810267中,我必须使用哪个符号来提取坐标值,非常感谢!