2012-09-05 1 views
9

저는 AJAX를 통해 XML 스트림을 잡아 파싱하는 자바 스크립트 루틴을 가지고 있습니다. 그것은 FF와 크롬에서 잘 작동하지만 IE 9에서는 노드 내에 연속적인 라인 피드가있는 경우 IE는이를 스페이스와 한 줄 피드로 압축합니다.IE 9는 XML DOM 내의 공백을 압축합니다.

특히 retNode가 xml 노드 인 경우 retNode.text는 IE에 압축 된 공백을 포함하지만 FF 및 Chrome의 모든 문자를 포함합니다.

나는 XML을 파싱하기 위해 내 자신의 루틴을 작성하려고했지만 허약하고 시간 낭비로 보인다. PreserveWhitespace 속성을 사용하여 시도했지만 javascript에서 사용할 수없는 것 같습니다. retNode.text 대신 retNode.nodeValue를 사용했지만 nodeValue에 값이 없습니다.

나는 jquery를 모르기 때문에 jquery를 사용하지 않는 솔루션을 선호하며, jquery 작업을 만들기 위해 추가해야하는 코드가 무엇인지 확실하지 않습니다.

미리 감사드립니다.

+3

공백을 보존하려면 'CDATA'또는 뭔가를 사용해야합니다. 이 XML 소스를 수정할 수 있습니까? – Brad

+0

일반적으로 XML에서 공백을 처리하는 것은 DTD 또는 XSD와 같은 문서 문법에 달려 있습니다. 답변을 제공하기 위해이 분야의 브라우저 동작을 살펴본 지 오래되었습니다. – McDowell

답변

1

preserveWhiteSpace은 (는) JavaScript에서 제공됩니다.

다음 코드를 사용해 보셨습니까?

var xhr = new XMLHttpRequest(); 
xhr.responseXML.preserveWhiteSpace = true; 
… 
+0

'preserveWhiteSpace'는 실제로 IE의 JavaScript에서 사용할 수 있지만 연결을 설정하기 전에'xhr.responseXML'에 액세스하려고하면'이 작업을 완료하는 데 필요한 데이터를 아직 사용할 수 없습니다. '라는 오류가 발생합니다. @JoeFawcett에 따르면 IE8에서는'open()'과'send()'호출 사이에'xhr.responseXML.preserveWhiteSpace = true'를 호출 할 수있었습니다.하지만 IE9를 사용하면 다음과 같은 오류가 발생합니다 :'Could not 오류 c00c023f'로 인해 작업을 완료하십시오. – avernet

0

잃어버린 태그 사이의 공백이어야합니다. 비 태그 사이의 공백 (예 : 한 쌍의 태그 사이의 문자열 사이)은 항상 보존되어야합니다.

즉, <tag> </tag><tag></tag>이되고 <tag>foo bar</tag>은 변경되지 않습니다.

두 태그 사이의 공백을 보존해야하는 경우

preserveWhiteSpace 어떤 이유로 당신을 위해 작동하지 않는, 그럼 난 당신이 가능하면 &nbsp;의 (당신의 XML 소스의 숫자 버전을 &#160;을 넣어야 할 거라고 생각하는 당신을 엔티티를 정의하지 않는 한 정상적인 상황에서 XML 문자가 잘못 사용되므로 사용할 수 없습니다.

+1

일반 공간은 깨지지 않는 공간과는 다르므로 제안하는 해결책은 질문 한 사람이 시도하는 것과 정확히 동일하지 않습니다. – avernet