2009-02-02 11 views

답변

-1

당신은 CDATA로 저장할 수 있지만, 일부 바이트 시퀀스가 ​​CDATA 섹션을 닫습니다 유효한 XML로 평가 될 위험이있다. http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect을 간략히 살펴본 후에는 "]]>"을 제외한 임의의 문자 시퀀스를 가질 수 있습니다. what is a valid XML char도보십시오.

+1

0-8, B, C, E, F FFFE 및 FFFF가 유효하지 않은 문자이므로 사용할 수 없다는 것을 의미하지 않습니까? –

+0

많은 바이트 시퀀스가 ​​보존되지 않기 때문에 다운 voting. "보존하지 않는다"는 것은 CDATA로 인코딩 된 데이터에서 원본 바이너리 데이터를 복구 할 수 없음을 의미합니다. 피트의 대답과 코멘트를보십시오. – rwong

+0

여기서 제안하는 것보다 훨씬 위험합니다. 피트의 대답을보십시오 ... – Phil

11

널 (null) 문자 (C에서 '\ 0')도 탈출로 어디서나 XML에 유효하지 않은 (& # 0).

+0

XML 파일이 널로 끝나기 때문에 나는 생각합니다. –

+2

@ 제레미 : 그들은 그렇지 않습니다. 널 (null)은 유효한 XML 문자가 아닙니다. 인기있는 프로그래밍 언어의 널 종료 문자열 때문일 수 있습니다 ... – Christoph

+0

표준에 대한 100 % 명확하지 않습니다.문자 범위 정의는 0 바이트를 제외하지만 일부 텍스트는 127 이하의 모든 문자가 유효하다고 말합니다. –

4

XML은 일반 텍스트 형식이므로 이진 데이터를 저장하는 데 사용하지 마십시오. 이진 BLOB를 별도의 파일에 넣고이 파일을 참조하는 요소를 XML에 추가하십시오. 당신은 하나의 파일에있는 모든 진 모양을 저장하려면, 그런 오프셋 속성 또는 뭔가를 추가 ...

+0

예, 플래시가 어떻게 파일에 연결되어 원시 바이너리 파일을 읽어야할까요? (ActionScript 2에만 해당) –

+0

ByteArray 또는 URLLoader 대화를 나에게주지 마십시오. 이것은 AS2 전용입니다. –

+2

@ 제레미 : 그리고 정확히 어디에서 질문하셨습니까? – Christoph

7

없음 XML 파일에 바이너리 데이터를 삽입하기 만 CDATA를 사용할 수 없습니다.

(XML 1.1하지만 제어 문자에 대해 더 관대하기 때문에) XML1.0에서, 다음과 같은 제한이 CDATA 문자에 적용

: 여러 문자가 그들 사이에 있으며, 불법이 의미

CData  ::=  (Char* - (Char* ']]>' Char*)) 
Char  ::=  #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] 

:

  • 불법 UTF-8 시퀀스를 0xFF 또는 비 정식 0b1100000x 0b10xxxxxx
  • 같은 새로운 라인, 캐리지 리턴과 탭을 제외한 0x20에에

    • 불법 XML 제어 문자 × 00 그 외에도 6,

    , 표준 엔티티 CDATA없이 콘텐츠 :

    • "<"와 ">"사용
    • 는 "&"사용이 제한되어 불법 (&eacute;&zajdalkdza;이며, OK입니다 하지 않음)

    그래서 CDATA은 "]]>"제한 대신하여 "<", ">"와 "&"할 수 있도록 단지 방법입니다. 주된 문제점 인 불법 XML, 유니 코드 및 UTF-8 문자 문제는 해결되지 않습니다.

    솔루션 :

    1. 사용 Base64 33 %의 오버 헤드를 제외한 모든 프로그래밍 언어에 큰 지원은 여전히 ​​제한 구현과 표준
    2. 사용 BaseXML있어 사실이지만 20 %의 오버 헤드 only
    3. 가능하면 XML 내에서 이진 데이터를 인코딩하지 말고 별도로 전송하십시오.