2014-04-03 3 views
0

나는 parse an xml file을 (를) 찾으려고합니다. function downloadUrl을 사용하고 있습니다. 내 xml 파일의 <link> 요소에 '&'(앰퍼샌드 문자)가 포함 된 URL이 포함되어 있습니다. 브라우저의 오류 메시지 : "null '의'documentElement '속성을 읽을 수 없습니다.&amp;으로 바꿉니다. my xml과 비슷한 샘플 파일에서 구문 분석을 실행합니다. 중요한 정보 : 내 xml을 편집 할 수 없습니다. 파일. 그래서,이 솔루션은 내가 상상하는 것을 좋아 .Something &amp;와 함께이 문자를 &를 대체하는 함수 자바 스크립트 코드를 삽입하는 것입니다자바 스크립트에서 xml 파일의 URL을 구문 분석 할 수 없습니다.

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

답변

0

문제는 responseXML 때문에 잘못된 XML 문서의 고장이다 , 그것은 단지 잘못된 문자열이 아닙니다. responseText을 검색하고 앰퍼샌드를 올바르게 인코딩 된 엔티티로 대체 한 다음 this SO question에 대한 해결책과 같은 작업을 수행하여 해당 문자열을 통과 가능한 XML 문서로 만들 수 있습니다.

+0

다음은 문자를 대체하는 또 다른 질문입니다. http : //stackoverflow.com/questions/11555890/how-to-parse-xml-with-special-character-specifically-for-ampersand – jwatts1980

+0

@ jwatts1980. 응답 해 주셔서 감사합니다! 여러 번 여러 번 시도해 봤지만 결과가 없었습니다. 저에게 보여 줄 수 있습니까? – marYOs

+0

Rob M.의 대답은 그 점을 설명합니다. – jwatts1980

관련 문제