无法从javascript中的xml文件中解析网址

问题描述:

我正在尝试parse an xml file。我正在使用function downloadUrl。我的xml文件的元素<link>包含一个包含'&'(字符)的网址。在我的浏览器中的错误说:“无法读取属性'documentElement'为null”我在样本文件中将&替换为&amp;-类似于我的xml并且解析运行良好!一个重要信息:我无法编辑我的xml文件。 因此,该解决方案是在javascript代码插入函数与&amp;来代替这个角色& .Something像我想象:无法从javascript中的xml文件中解析网址

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>[email protected]</managingEditor> 
    <webMaster>[email protected]</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); 
} 
}; 

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

+0

下面是处理替换字符的另一个SO问题:http ://*.com/questions/11555890/how-to-parse-xml-with-special-character-specifically-for-ampersand – jwatts1980

+0

@ jwatts1980。谢谢你的回应!我已经尝试了许多次插入替换,但我没有任何结果。你能告诉我方式吗? – marYOs

+0

Rob M.的回答解决了这个问题。 – jwatts1980