【问题标题】:How to parse xml with namespaces using JQuery (and working for all browser .. )?如何使用 JQuery 解析带有名称空间的 xml(并且适用于所有浏览器 ..)?
【发布时间】: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&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>

我必须在一些js变量中提取这些字段:

  • ms:nome
  • ms:公民
  • ms:istat
  • 毫秒:上限
  • ms:comune

我还需要确保我的代码可以在 IE、Firefox 和 Chrome 上正常运行。

我已经看到并尝试了几种我在 SO 中找到的解决方案,但都没有奏效。

非常感谢任何建议!

非常感谢您!

切萨雷

【问题讨论】:

    标签: jquery xml namespaces


    【解决方案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 的新手,很抱歉这个问题很糟糕...... :-)
      猜你喜欢
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 2019-03-17
      • 2023-04-03
      相关资源
      最近更新 更多