오버 헤드 대신 saving binary as Base64을 사용하면 XML 파일에 2 바이트 이진 스트림을 직접 저장할 수 있는지, CDATA를 사용하는지 또는 주석 처리하는지 궁금합니다.원시 이진 스트림을 저장하려면 CDATA를 사용하십시오.
답변
당신은 CDATA로 저장할 수 있지만, 일부 바이트 시퀀스가 CDATA 섹션을 닫습니다 유효한 XML로 평가 될 위험이있다. http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect을 간략히 살펴본 후에는 "]]>"을 제외한 임의의 문자 시퀀스를 가질 수 있습니다. what is a valid XML char도보십시오.
널 (null) 문자 (C에서 '\ 0')도 탈출로 어디서나 XML에 유효하지 않은 (& # 0).
XML 파일이 널로 끝나기 때문에 나는 생각합니다. –
@ 제레미 : 그들은 그렇지 않습니다. 널 (null)은 유효한 XML 문자가 아닙니다. 인기있는 프로그래밍 언어의 널 종료 문자열 때문일 수 있습니다 ... – Christoph
표준에 대한 100 % 명확하지 않습니다.문자 범위 정의는 0 바이트를 제외하지만 일부 텍스트는 127 이하의 모든 문자가 유효하다고 말합니다. –
XML은 일반 텍스트 형식이므로 이진 데이터를 저장하는 데 사용하지 마십시오. 이진 BLOB를 별도의 파일에 넣고이 파일을 참조하는 요소를 XML에 추가하십시오. 당신은 하나의 파일에있는 모든 진 모양을 저장하려면, 그런 오프셋 속성 또는 뭔가를 추가 ...
예, 플래시가 어떻게 파일에 연결되어 원시 바이너리 파일을 읽어야할까요? (ActionScript 2에만 해당) –
ByteArray 또는 URLLoader 대화를 나에게주지 마십시오. 이것은 AS2 전용입니다. –
@ 제레미 : 그리고 정확히 어디에서 질문하셨습니까? – Christoph
없음 XML 파일에 바이너리 데이터를 삽입하기 만 CDATA를 사용할 수 없습니다.
(XML 1.1하지만 제어 문자에 대해 더 관대하기 때문에) XML1.0에서, 다음과 같은 제한이 CDATA 문자에 적용: 여러 문자가 그들 사이에 있으며, 불법이 의미
CData ::= (Char* - (Char* ']]>' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
:
- 불법 XML 제어 문자 × 00 그 외에도 6,
, 표준 엔티티 CDATA없이 콘텐츠 :
- "<"와 ">"사용
- 는 "&"사용이 제한되어 불법 (
é
는&zajdalkdza;
이며, OK입니다 하지 않음)
그래서 CDATA은 "]]>"제한 대신하여 "<", ">"와 "&"할 수 있도록 단지 방법입니다. 주된 문제점 인 불법 XML, 유니 코드 및 UTF-8 문자 문제는 해결되지 않습니다.
솔루션 :
- 1. 구문 분석 : 메모리에로드하거나 스트림을 사용하십시오.
- 2. 이진 IO 스트림을 파일로 변환
- 3. 원시 데이터 스트림을 생성하는 방법은 무엇입니까?
- 4. 브라우저로 이진 스트림을 보내고 페이지를 업데이트하십시오.
- 5. 콘솔에서 이진 데이터를보기 위해`cout`을 사용하십시오.
- 6. 원시 이진 데이터를 이미지 파일로 변환 하시겠습니까?
- 7. 긴 이진 (원시 데이터) 문자열 저장
- 8. Unix에서 원시 (문자) 장치 스트림을 추적하는 방법은 무엇입니까?
- 9. C#으로 순수 PCM 원시 스트림을 재생하는 방법은 무엇입니까?
- 10. PHP에서 원시 I/O 스트림을 읽는 다른 방법
- 11. 일반적으로 스크립트에서 CDATA를 사용해도 괜찮습니까?
- 12. lisp 디코딩? 혀짤배기 에서 이진 스트림을 디코딩하는 방법
- 13. 원시 이진 트리 데이터베이스 또는 MongoDb/MySQL/Etc?
- 14. 원시 데이터 또는 이진 읽기 및 쓰기 프레임 워크 만들기
- 15. 원시 (이진) ctype 버퍼에서 파이썬 문자열을 작성하는 방법은 무엇입니까?
- 16. boost :: asio를 사용하여 원시 이진 데이터를 보내는 방법
- 17. 원시 데이터 소스
- 18. CDATA를 큰 변화로 사용하기 시작 했습니까?
- 19. BeautifulSoup에서 CData를 가져 오는 방법은 무엇입니까?
- 20. linq to xml을 사용하여 CDATA를 읽는 중
- 21. 정규식 XML 용 CDATA를 추가하는 정규식
- 22. html 문서에서 CDATA를 사용하는 방법은 무엇입니까?
- 23. HTTP 스트림을 중단하면 어떻게됩니까?
- 24. Riak에 이미지 또는 바이너리 데이터를 저장하려면 어떻게해야합니까?
- 25. 이진 스트림의 엔트로피 인코딩
- 26. cout 이진 데이터
- 27. 특정 상한이없는 문자열을 postgresql에 저장하려면 무엇을 사용해야합니까?
- 28. android - 백그라운드 서비스에서 카메라를 사용하십시오.
- 29. 마우스가 아닌 마우스 입력을 사용하십시오.
- 30. WebBrowser에서 이진 내용에 액세스
0-8, B, C, E, F FFFE 및 FFFF가 유효하지 않은 문자이므로 사용할 수 없다는 것을 의미하지 않습니까? –
많은 바이트 시퀀스가 보존되지 않기 때문에 다운 voting. "보존하지 않는다"는 것은 CDATA로 인코딩 된 데이터에서 원본 바이너리 데이터를 복구 할 수 없음을 의미합니다. 피트의 대답과 코멘트를보십시오. – rwong
여기서 제안하는 것보다 훨씬 위험합니다. 피트의 대답을보십시오 ... – Phil