javascript - 在 IE 上使用 ajax 获取并解析 xml

标签 javascript xml internet-explorer web xml-parsing

我从 URL 返回了以下 XML:

    <?xml version='1.0' encoding='UTF-8' ?>
<!--  search hits from ThunderBallWebService -->
<iHS>
  <Params>
    <param name='start'><![CDATA[0]]></param>
    <param name='return'><![CDATA[content_arabic;url;metatag.publishdt;metatag.title;metatag.site;metatag.channel;metatag.image;metatag.newImage;metatag.newstopics]]></param>
    <param name='groupby'><![CDATA[metatag.site]]></param>
    <param name='output'><![CDATA[xml]]></param>
    <param name='hitsPerPage'><![CDATA[12]]></param>
    <param name='all'><![CDATA[مصر]]></param>
    <param name='filter'><![CDATA[-id:*learning.aljazeera*]]></param>
  </Params>
  <Response>
    <Qtime>16</Qtime>
  </Response>
  <HitsCount>
    <hitsPerPage>12</hitsPerPage>
    <total>1</total>
    <matches>7</matches>
    <start>0</start>
    <end>1</end>
    <totalIsExact>true</totalIsExact>
  </HitsCount>
  <Results>
    <group id='0' name='metatag.site' value='57258a24e91a42b0b2399dccf49cf8c1' count='7' start='0'>
      <Hits>
        <Hit id='0'>
          <metatag.publishdt type=''><![CDATA[2015-11-02]]></metatag.publishdt>
          <metatag.image type=''><![CDATA[65cb6546-b449-4c72-b0c0-eeb07d9adfb1]]></metatag.image>
          <metatag.title type=''><![CDATA[انطلاق انتخابات <em>مصر</em> بالداخل والمعارضة تقاطع]]></metatag.title>
          <id type=''><![CDATA[http://site.aja.qa/news/pages/91385ee9-203d-4969-b5d9-19083fae1bf5]]></id>
          <url type=''><![CDATA[http://site.aja.qa/news/pages/91385ee9-203d-4969-b5d9-19083fae1bf5]]></url>
          <content_arabic type=''><![CDATA[انطلاق انتخابات <em>مصر</em> بالداخل والمعارضة تقاطع تنطلق اليوم الأحد المرحلة الأولى من الانتخابات]]></content_arabic>
          <metatag.site type=''><![CDATA[57258A24E91A42B0B2399DCCF49CF8C1]]></metatag.site>
          <metatag.newstopics type=''><![CDATA[42c25b5e-f336-47c0-a1f8-d17deec868d7,]]></metatag.newstopics>
          <metatag.channel type=''><![CDATA[84AD340701C24F699597D698D2547472]]></metatag.channel>
        </Hit>
        <Hit id='1'>
          <metatag.publishdt type=''><![CDATA[2015-10-19]]></metatag.publishdt>
          <metatag.image type=''><![CDATA[e5762dbc-705d-43d2-920e-9cbb89e5a850]]></metatag.image>
          <metatag.title type=''><![CDATA[كوميديا الدعاية الانتخابية بمصر]]></metatag.title>
          <id type=''><![CDATA[http://site.aja.qa/news/arabic/2015/10/19/%d9%83%d9%88%d9%85%d9%8a%d8%af%d9%8a%d8%a7-%d8%a7%d9%84%d8%af%d8%b9%d8%a7%d9%8a%d8%a9-%d8%a7%d9%84%d8%a7%d9%86%d8%aa%d8%ae%d8%a7%d8%a8%d9%8a%d8%a9-%d8%a8%d9%85%d8%b5%d8%b1]]></id>
          <url type=''><![CDATA[http://site.aja.qa/news/arabic/2015/10/19/%d9%83%d9%88%d9%85%d9%8a%d8%af%d9%8a%d8%a7-%d8%a7%d9%84%d8%af%d8%b9%d8%a7%d9%8a%d8%a9-%d8%a7%d9%84%d8%a7%d9%86%d8%aa%d8%ae%d8%a7%d8%a8%d9%8a%d8%a9-%d8%a8%d9%85%d8%b5%d8%b1]]></url>
          <content_arabic type=''><![CDATA[كوميديا الدعاية الانتخابية بمصر تبدو مشاهد الدعاية الانتخابية لمرشحى برلمان <em>مصر</em>، كما لو كانت مقتطعة]]></content_arabic>
          <metatag.site type=''><![CDATA[57258A24E91A42B0B2399DCCF49CF8C1]]></metatag.site>
          <metatag.newstopics type=''><![CDATA[33a9ad72-a45f-4827-bb18-2e71685abf89,e8b8f3f7-4fd6-4d78-846d-9c8d2239fda4,]]></metatag.newstopics>
          <metatag.channel type=''><![CDATA[84AD340701C24F699597D698D2547472]]></metatag.channel>
        </Hit>
        <Hit id='2'>
          <metatag.publishdt type=''><![CDATA[2015-11-18]]></metatag.publishdt>
          <metatag.image type=''><![CDATA[246d383c-bb2a-4167-b75f-0bf8c68b0ca8]]></metatag.image>
          <metatag.title type=''><![CDATA[إندبندنت: فيديو منسوب لتنظيم الدولة يهدد إسرائيل]]></metatag.title>
          <id type=''><![CDATA[http://site.aja.qa/news/arabic/2015/10/24/%d8%a5%d9%86%d8%af%d8%a8%d9%86%d8%af%d9%86%d8%aa-%d9%81%d9%8a%d8%af%d9%8a%d9%88-%d9%85%d9%86%d8%b3%d9%88%d8%a8-%d9%84%d8%aa%d9%86%d8%b8%d9%8a%d9%85-%d8%a7%d9%84%d8%af%d9%88%d9%84%d8%a9-%d9%8a%d9%87%d8%af%d8%af-%d8%a5%d8%b3%d8%b1%d8%a7%d8%a6%d9%8a%d9%84]]></id>
          <url type=''><![CDATA[http://site.aja.qa/news/arabic/2015/10/24/%d8%a5%d9%86%d8%af%d8%a8%d9%86%d8%af%d9%86%d8%aa-%d9%81%d9%8a%d8%af%d9%8a%d9%88-%d9%85%d9%86%d8%b3%d9%88%d8%a8-%d9%84%d8%aa%d9%86%d8%b8%d9%8a%d9%85-%d8%a7%d9%84%d8%af%d9%88%d9%84%d8%a9-%d9%8a%d9%87%d8%af%d8%af-%d8%a5%d8%b3%d8%b1%d8%a7%d8%a6%d9%8a%d9%84]]></url>
          <content_arabic type=''><![CDATA[ الجهات، من جانب شبه جزيرة سيناء في <em>مصر</em> ومن جانب دمشق في سوريا ومن جهات أخرى. تهديد مباشر وأضافت الصحيفة]]></content_arabic>
          <metatag.site type=''><![CDATA[57258A24E91A42B0B2399DCCF49CF8C1]]></metatag.site>
          <metatag.newstopics type=''><![CDATA[42c25b5e-f336-47c0-a1f8-d17deec868d7,]]></metatag.newstopics>
          <metatag.channel type=''><![CDATA[84AD340701C24F699597D698D2547472]]></metatag.channel>
        </Hit>
      </Hits>
    </group>
  </Results>
  <Faceted>
    <field name='metatag.site'>
      <value name='57258a24e91a42b0b2399dccf49cf8c1' count='7'>57258a24e91a42b0b2399dccf49cf8c1 (7)</value>
      <value name='null' count='0'>null (0)</value>
    </field>
  </Faceted>
</iHS>

当我尝试在 Chrome 和 Firefox 中解析它时,一切都很顺利,但在 IE 中我收到以下错误:

XML5632: Only one root element is allowed. Line: 2, Column 1

这是我的 AJAX:

    function ajxGetXml(url) {
    debugger;
    $.ajax({
        crossDomain: true,
        type: "GET",
        cache: true,
        url: url,// decodeURI(url), //encodeURI(url),
        dataType: "xml",
        success: parseXml,
        timeout: 10000,        // sets timeout for the request (10 seconds)
        error: function (req, err) { console.log('my message' + err); }
    });
}

以及解析 XML 的函数:

    function parseXml(xObj) {
    debugger;
    var dom = null;
    if (window.DOMParser) {
        try {
            dom = (new DOMParser()).parseFromString(xObj, "text/xml");
        }
        catch (e) { dom = null; }
    }
    else if (window.ActiveXObject) {
        try {
            dom = new ActiveXObject('Microsoft.XMLDOM');
            dom.async = false;
            if (!dom.loadXML(xObj)) // parse error ..
                window.alert(dom.parseError.reason + dom.parseError.srcText);
        }
        catch (e) { dom = null; }
    }
}

我被困在这里 4 天了,运气不佳,任何帮助将不胜感激。

最佳答案

鉴于错误消息中的第 # 行,我同意:

XML5632: Only one root element is allowed. Line: 2, Column 1

这可能是评论。但是...

根据 XML 标准 ( https://www.w3.org/TR/2006/REC-xml-20060816/ ),注释在那里有效:

document   ::=   prolog element Misc*

prolog     ::=      XMLDecl? Misc* (doctypedecl Misc*)?

XMLDecl    ::=      '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

Misc       ::=      Comment | PI | S

xmllint 传递您的文件。但 IE 是,好吧 IE...

如果不出意外的话,我想总会有一种暴力:

xObj.replace(/<!--(.*?)-->/, "");

关于javascript - 在 IE 上使用 ajax 获取并解析 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35251886/

相关文章:

javascript - Ajax 请求未在 IE 中发送。 11

javascript - 如何在Jquery中解除keydown事件的绑定(bind)一段时间然后再次绑定(bind)它?

javascript - 如何更改react.js redux中另一个reducer的状态?

javascript - 监听事件 "close enough"到元素

c# - 将没有根元素名称的具有多种类型的列表序列化为 XML

javascript - 如何使用 JavaScript 转换 XML 和 XSLT?

javascript - 类型错误 : Cannot read property 'constructor' of undefined

java - NodeSq 不符合预期的整数类型

c# xml 显示最高值

CSS3 过滤器不适用于 ie 10 中的元素