解析使用jQuery和所有的浏览器工作的命名空间的XML ..(Parse xml with nam

2019-09-29 15:33发布

我试图解析从使用JQuery 1.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>

在这里,你是我的代码

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));

而在这里,你是我的jsfiddle所以你可以尝试它

任何建议或解决方法吗? 预先感谢您非常...

切萨雷

Answer 1:

你必须要小心的命名空间......如果你使用XML有你必须牢记这一点,并建立适当的选择一些命名空间的申报工作。

例如:

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

请采取更新一下小提琴 。 现在,它在FF和IE浏览器的工作原理也是如此。



Answer 2:

这并没有为我工作,但我已经找到了一个可行的解决方案在这里:

http://jamesmcdonald.id.au/it-tips/google-chrome-xml-namespaces在上面的页面,我们可以发现这一点:

$(xml).find('ns1\\:ld_det, ld_det');

其中“NS1”是命名空间,如GML,和“ld_let”是节点名称。

它的工作原理在谷歌浏览器了。



Answer 3:

在情况下,如果有人面临解析与MS边缘浏览器XML命名空间的问题,这里是解决方法:

$.fn.filterNodeByPrefix = function(prefix) {
    return this.filter(function() {
        return this.prefix === prefix;
    });
};

我们可以使用这个功能:

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

尝试和在铬,FF,IE和MS边缘测试。



文章来源: Parse xml with namespaces using JQuery and working for all browser ..