2012-05-03 4 views
2

기존 DOM을 사용하여 Java에서 다중 행 XML 속성을 구문 분석하려고합니다. 구문 분석은 정상적으로 작동합니다. 그러나 줄 바꿈이 파손되어 파싱 된 문자열을 렌더링 할 때 줄 바꿈이 간단한 공백으로 바뀝니다. Java에서 XML 다중 행 문자열을 구문 분석하십시오.

<string key="help_text" value="This is a multi line long 
           text. This should be parsed 
           and rendered in multiple lines" /> 

내가 사용하고 속성 얻으려면 : 의도 한대로 난 그냥 "\ n을"를 사용하여 렌더링 방법에 수동으로 입력 문자열을 전달하면

attributes.getNamedItem("value").getTextContent() 

를 텍스트가 그려됩니다.

아이디어가 있으십니까?

+1

코드 XML 사양 CR에 따르면 – ControlAltDel

답변

3

이전에는 JDom을 사용했습니다. 다중 속성을 디코딩 할 때 많은 문제를 줄이고 Java에서 XML 구문 분석/쓰기를 향상시킵니다.JDom은 Android 개발과도 호환되며 실제로는 아주 작습니다 (단 하나의 jar 파일).

https://github.com/hunterhacker/jdom

+0

나는 처음에는 (매우 추악한) "< br/>"해결책을 사용했지만 지금은 JDom을 살펴볼 것입니다. 고마워. –

+1

@Fsero - JDom에서 어떻게 관리했는지 간단히 설명 할 수 있습니까? 나는 방금 작은 단위 테스트를 작성했고 속성의 개행 문자는 Jerom에 도착하기 전에 Xerces 영역에서 지워집니다. – nullPainter

3

XML specification에 따르면 XML 구문 분석기는 줄 바꿈 문자를 공백으로 대체하는 등의 속성 공백을 표준화해야합니다. 나는. 줄 바꿈을 유지해야 할 경우 특성 값을 사용할 수 없습니다.

일반적으로 XML의 공백 처리는 많은 문제가 있습니다. 특히 CR, LF 및 CRLF의 차이점은 어디에서도 유지되지 않습니다.

특성에있는 개행 문자를 &lt;br /&gt; (즉, <br />의 인코딩 된 버전)으로 인코딩 한 다음 나중에 디코딩하는 것이 더 좋습니다.

+1

@ 벤이/LF 조합은 XML 프로세서에 의해 LF 정규화되어야 게시하시기 바랍니다. – erikxiv

+0

예. 따라서 응용 프로그램과의 차이가 중요한 경우 다른 인코딩 방법을 찾아야합니다. 직접 작성한 특수 태그가 이상적인 방법입니다. – Ben

2

the XML specifcation : 3.3.3 속성 값 정규화. 당신은 모든 공백이 하나의 공간으로 normallised되는 것을 볼 수 있습니다 :

속성의 값이 유효성 검사 응용 프로그램이나 에 전달되기 전에, XML 프로세서는 아래의 알고리즘을 적용하여 속성 값을 정상화해야 또는 응용 프로그램에 전달 된 값이 알고리즘에 의해 생성 된 과 같은 값이되도록 다른 메서드 을 사용합니다. 모든 줄 바꿈은 2.11 줄 끝 처리에서 설명한대로 #xA에 대한 입력시 을 정규화해야하므로이 알고리즘의 나머지 은이 방식으로 정규화 된 텍스트에서 작동합니다.

빈 문자열로 구성된 정규화 된 값으로 시작하십시오. 표준화되어 있지 않은 속성 값의 각 문자, 엔티티 참조, 또는 문자 참고로

, 첫 번째로 시작하고 마지막에 을 계속, 다음을 수행하십시오 문자 참고로

을에 참조 된 문자를 추가 정규화 된 값

엔터티 참조의 경우이 알고리즘의 3 단계를 엔터티의 대체 텍스트 에 재귀 적으로 적용합니다.

공백 문자 (# x20, #xD, #xA, # x9)의 경우 정규화 된 값에 문자 (# x20)를 추가하십시오.

다른 문자의 경우 정규화 된 값에 문자를 추가하십시오.

관련 문제