2011-01-11 5 views
5

나는 XMLHttpRequest을 사용하여 자바 스크립트에서 RSS 리더를 코딩하고 있습니다. 일부 RSS 나는 아무 문제가 없었다하지만 어떤 경우에는 xmlDocument.firstChild 속성이 근무 XML과 나는 다음과 같은 것을 발견했다하지 않은 사람의 차이를 보려고하면 항상 NULLXML CDATA 섹션에서]]]

했다 피드를 들어

오류의 원인입니다. 나는 CDATA의 폐쇄 괄호 다음에 닫는 대괄호 내 오류의 원인이되는이이 설명 태그에서 즉, 내가 C의 같은 XML에 대한 LINQ를 사용하여 # 모든 것을 가진 코드를 만들었 때문에

<item> 
    <description> 
     <![CDATA[This is a description for a test [...]]]> 
    </description> 
</item> 

일했다.

CDATA의 닫는 대괄호 바로 앞에있는 닫는 대괄호가이 이상한 동작을 유발합니다. C#과 LINQ를 사용하여 동일한 XML을 읽으려고 시도한 테스트에서 모든 작업이 정상적으로 수행되었습니다.

그런 다음 나는 다음과 같은

<![CDATA[This is a description for a test [...] ]]>

처럼, 닫는 괄호 사이에 공백을 추가하는 시도하고 일했다!

내 자바 스크립트 코드

function LoadRSS() { 
    http_request.onreadystatechange = function() { showContent(http_request); }; 
    http_request.open("GET", "./feeds/test.xml", true); 
    http_request.send(false); 
} 


function showContent(http_request) { 
    if (http_request.readyState == 4) { 
     if (http_request.status == 200) { 
      var parser = new DOMParser(); 
      var xml_doc = parser.parseFromString(http_request.responseText, "text/xml"); 
      alert(xml_doc.firstChild) 
     } 
     else { 
      xml_doc = null; 
     } 
    } 
} 

사람이 비슷한 직면합니까 ? 지금 나는 어떤 의견이나 제안을 진행하는 법을 정말로 모른다.

+1

이것은 XML 파서의 버그 인 것으로 보입니다. 어떤 OS/브라우저/버전을 사용하고 있습니까? – Phrogz

+0

브라우저는 OBIGO라고 불리며 휴대폰 용 브라우저입니다 – YasuDevil

+1

그래, 깨진 브라우저. CDATA 섹션에 ']]'조합을 포함 할 수 있습니다. 만 풀 ']]>'끝내십시오. – StaxMan

답변

5

사용중인 브라우저가 CDATA 섹션을 잘못 파싱 한 것처럼 보입니다. 구역 끝에는 ]]> 만 표시되고 다른 대괄호는 영향을주지 않아야합니다.

+0

글쎄, 괄호를 교체 problably 내 문제가 해결됩니다. 다른 브라우저에서 동일한 코드를 실행하여 어떤 일이 발생하는지 확인하려고합니다. – YasuDevil

+1

첫 번째 부분이 옳다. 두 번째 잘못되었다. 네, 엔티티를 포함 할 수는 있지만 그 엔티티는 분석되지 않고 그대로 포함됩니다. 따라서 엔티티를 사용하여 아무 것도 인용 할 수 없습니다. – StaxMan

+1

@StaxMan : 죄송합니다. 해당 섹션을 잘못 해석했습니다. 속성 값에만 사용되며 일반 CDATA 섹션에는 적용되지 않습니다. @ YasuDevil : 결국 내 솔루션이 작동하지 않을 것 같아요. – casablanca

1

"진행 방법"은 ... CDATA 블록의 끝 부분 앞에 항상 공백을 넣지 않는 이유는 무엇입니까? 생성 된 XML을 제어 할 수 있습니까? 그렇다면 JS를 사용하여 다음을 수행 할 수 있습니다.

var xml = http_request.responseText.replace(/\]\]>/g, ' ]]>'); 
var xml_doc = parser.parseFromString(xml, "text/xml"); 
+0

예, 좋은 해결책입니다. 감사합니다. – YasuDevil