无法解析javascript中的xml文件中的url

时间:2014-04-03 14:23:59

标签: javascript xml parsing replace

我试图parse an xml file。我正在使用function downloadUrl。我的xml文件的元素<link>包含一个带有&#39;的网址。 &安培; &#39; (ampersant字符)。浏览器中的错误显示:&#34;无法阅读属性&#39; documentElement&#39; null&#34; 我将&替换为示例文件中的&amp; - 类似于我的xml,并且解析运行得很好!一个重要信息:我无法编辑我的xml文件。 所以,解决方案是在javascript代码中插入一个函数来用&替换这个字符&amp;。这就像我想象的那样:

function htmlEscape(items) {
    return String(items)
            .replace(/&/g, '&amp;');
    }

但我无法找到如何做到这一点的方法。 这是我的剧本:

var infowindow;
      var map;

      function initialize() {
        var myLatlng = new google.maps.LatLng(38.822590,24.653320);
        var myOptions = {
          zoom: 6,
          center: myLatlng,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        }
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        downloadUrl("moredata.xml", function(doc) {
          var items = doc.documentElement.getElementsByTagName("item");
          for (var i = 0; i < items.length; i++) {
               var description = items[i].getElementsByTagName("description")[0].textContent;
                var temp        = items[i].getElementsByTagName("temp")[0].textContent;
                    var title       = items[i].getElementsByTagName("title")[0].textContent;
            var link        = items[i].getElementsByTagName("link")[0].textContent;
            var latlng      = new google.maps.LatLng(parseFloat(items[i].getElementsByTagName("glat")[0].textContent),
                                                     parseFloat(items[i].getElementsByTagName("glon")[0].textContent));

我的xml的一部分:

<channel>
    <title>
        Real time weather in Greece
    </title>
    <link>http://www.123.gr/</link>
    <image>
    <url>
    http://www.123.gr/templates/metar/images/metar.gif
    </url>
    <title>123.gr</title>
    <link>http://www.123.gr/</link>
    </image>
    <description>
    Real time weather in Greece
    </description>
    <language>el</language>
    <pubDate>Thu, 03 Apr 2014 17:08:10 +0300</pubDate>
    <copyright>123.gr</copyright>
    <managingEditor>kondilis@123.gr</managingEditor>
    <webMaster>admin@123.gr</webMaster>
    <item>
    <title>Center</title>
    <description>Salonica</description>
    <link>
        http://www.metar.gr/index.php?option=com_jumi&fileid=12&Itemid=73&station=1227
    </link>
    <temp>16.7 °C</temp>
    <glat>40.422726139672626</glat>
    <glon>22.93392777442932</glon>
    </item>
</channel>

downloadUrl函数:

function downloadUrl(url, callback) {
 var status = -1;
 var request = createXmlHttpRequest();
 if (!request) {
   return false;
 }

 request.onreadystatechange = function() {
   if (request.readyState == 4) {
     try {
       status = request.status;
     } catch (e) {
       // Usually indicates request timed out in FF.
     }
     if (status == 200) {
       callback(request.responseXML, request.status);
       request.onreadystatechange = function() {};
     }
   }
 }
 request.open('GET', url, true);
 try {
   request.send(null);
 } catch (e) {
   changeStatus(e);
 }
};

1 个答案:

答案 0 :(得分:0)

问题是responseXML由于XML文档无效而被破坏,它不仅仅是一个无效的字符串。您可能必须检索responseText,用正确编码的实体替换&符号,然后执行类似this SO question的解决方案,以将该字符串转换为可遍历的XML文档