Shrek
2006-05-11 20:11:24
1
8337

RSS 나 JSON 에서 CDATA 의 값에서 제약이 있습니다.


RSS 나 JSON 에서 CDATA 의 값에서 제약이 있습니다.
 
xml 1.0에서 조금 깔탈 스럽고, 1.2에서는 조금더 작아졌다고는 합니다. ^^
 
 
 
문서에 보면 CDATA는
 
로 정의 되었습니다.
 
여기에 Char 쪽을 살펴 보면
 
 
 
 
이런 말이 나오죠
 
즉 위의 문자 범위 이외에는 XML Parser에서 오류가 나옵니다.
 
 이런 종류의 Control 문자 등이 CDATA에 포함되면 가차없이 오류...ㅋㅋ
 
 
그래서 이를 잘 처리 해주셔야 합니다..
 
간단히 처리 하자면,
 
 
   public static String replaceInvalidXMLChar(String s, char replaceChar) {
        if( s == null) return s;
       
        StringBuffer sb = new StringBuffer(s.length());
        char ch;
        for( int i = 0; i < s.length(); i++)
        {
            ch = s.charAt(i);
            if(
                !(ch == 0x0009
                || ch == 0x000A
                || ch == 0x000D
                ||(ch >= 0x0020 && ch <= 0xD7FF)
                ||(ch >= 0xE000 && ch <= 0xFFFD)
                ||(ch >= 0x10000 && ch <= 0x10FFFF))
            )
                sb.append( replaceChar);
            else
                sb.append( ch);
               
        }
        return sb.toString();
    }
 
 
 
그리고  JSON 에서 CDATA 를 자바스크립트 객체로 변환할때,
 
 <data><![CDATA[
  .....
 ]]></data>
 
  위 처럼 하지 않고,
 
 <data>
<![CDATA[
  .....
 ]]>
</data>
 
위 처럼 해서
 
eval( "(" + xmlDoc.getElementsByTagName('data').item(0).firstChild.nodeValue + ")" )
 
자바스크립트 객체로 등록하면, IE 에서는 그런데로 동작을 하지만,
 
FF 에서는 <data>#text 의 값을 가져와서 객체화 시키기 때문에 오류가 남니다.
 
그래서 그냥 편하게 ^^
 
<data><![CDATA[
  .....
 ]]></data>
 
 
이 형태를 지켜 주시는게 야근 모두에 도움이 되실듯.......
0
0
  • 댓글 1

  • korcslewis
    2006-05-18 13:51:52
    오늘부터 Ajax 본격적으로 공부하는데 도움이 되겠네요^^
    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.