2010-04-12 3 views
7

Java 응용 프로그램에서 CDATA 내에 제어 문자 0x2이 포함 된 XML 문서를 구문 분석해야합니다.XML1.1을 사용하여 유니 코드 문자 (0x2) 구문 분석

몇 가지 방법을 시도했지만 coudnt가 통과했습니다. 어떤 종류의 인코딩도 피하고 싶습니다.

XML1.1에는 어떤 방법이 있습니까?

+0

그런데 유니 코드 코드 포인트 (특정 인코딩과 반대)를 나타내는 올바른 표기법은 'U + xxxx'입니다 (예 : 귀하의 경우 U + 0002) : http : //en.wikipedia. org/wiki/Unicode –

답변

2

XML은 ASCII 제어 문자 (TAB, CR 및 LF 제외)를 포함 할 수 없으며 CDATA 섹션에도 포함될 수 없습니다. 그것들은 XML 스펙에 의해 허용되지 않습니다.

이진 데이터를 Base64 문자열로 인코딩하여 XML에 씁니다. 이 경우에는 CDATA가 필요 없습니다.

+0

첫 번째 부분은 XML 1.0에만 해당됩니다. XML 1.1에서는 이러한 문자를 문자 참조로 사용할 수 있습니다. XML 1.1은 널리 채택되지 않았습니다. Tomalak에서 제안한대로 XML 1.0을 사용하여 이진 데이터로 인코딩하는 것이 가장 쉽고 호환성있는 솔루션 일 것입니다. –

+0

하지만 xml1.1에 대한 내용은 xml1.0에서 지원되지 않는 유니 코드 문자가 xml1.1에서 지원되는 것으로 보입니까? –

+0

그들은 XML 1.1에서 문서 내용의 일부일 수도 있지만 그래도 여전히 일련의 XML에서 문자 참조로만 유효합니다. (심지어 Tomalak이 말했듯이, XML에서 임의의 2 진 덩어리를 쓰는 것은 일반적으로 매우 나쁜 생각입니다.) – bobince

11

난 후,하지 XML의 CDATA

내부 제어 문자 0x2가 포함되어 XML을 구문 분석 할 필요가있다. 원시 제어 문자 U + 0002는 형식이 올바르지 않으므로 XML 문서가 아님을 의미합니다.

XML 1.1에만 문자 참조로 인코딩 된 제어 문자가 포함될 수 있습니다. 따라서 구문 분석을 수행하기 전에 \x02 문자열을 으로 대체하여 문제를 해결하려고했을 수 있습니다. 그러나 CDATA 섹션에는 문자 참조를 넣을 수 없으므로 아무 것도 날아 가지 않습니다. 그러나

]]>&#2;<![CDATA[ 

이것이다 :

편집 : 당신이 모든 길잃은 U + 0002 문자로 각각 대체하여, CDATA 섹션 안에 절대적으로 확신하는 경우 당신은 아마, 단기적으로 문제를 해결할 수 슈퍼 shonky. 처음부터 결함있는 XML을 생성 한 것은 무엇이든 수정해야합니다. 그것을 만드는 책임자를 차버 쳐라!

+6

+1 잘못된 XML을 생성하는 사람들을 걷어차 기위한 +1. –

+0

누군가 Rekordbox 2.0.3과 함께 나쁜 XML을 제작하기 위해 Pioneer를 차려 주시기 바랍니다 – Dimme

+0

ms-word에서 추출한 텍스트와 같은 소리가납니다 :) –