2010-03-23 10 views
7

먼저 SAX 및 Java를 처음 사용한다고 가정 해 보겠습니다.마크 업은 올바른 형식이어야합니다.

잘 형성되지 않은 XML 파일에서 정보를 읽으려고합니다.

나는 응답에서 다음과 같은 오류를 얻을 SAX 나 DOM 파서를 사용하려고하면 :

<format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
<format type="driver" t="123412">001;023</format> 
    ... 

내가 강제 할 수 있습니다 :

The markup in the document following the root element must be well-formed. 

이 내 XML 파일을 설정하는 방법입니다 SAX 또는 DOM이 XML 형식이 아닌 경우에도 XML 파일을 구문 분석 할 수 있습니까?

도움 주셔서 감사합니다. 매우 감사. Haythem

+2

FYI : 정의 ... 잘 작성되지 않은 경우 ** XML이 아닙니다. http://en.wikipedia.org/wiki/XML#Well-formedness_and_error-handling –

답변

18

가장 좋은 방법은 아마도 사전 처리를 통해 XML을 형식화하는 것입니다. 이 경우, 당신은 단순히 같이, (그리고 심지어는 선택 사항입니다)에 XML 선언을 넣고 (선택 사항 없음) 루트 요소를 제공하여 그것을 달성 할 수있다 : 내가 임의로을 포착 한이

<?xml version="1.0"?> 
<wrapper> 
    <format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
    <format type="driver" t="123412">001;023</format> 
</wrapper> 

루트 엘리먼트의 "wrapper"라는 이름; 그것은 당신이 좋아하는 것이 될 수 있습니다.

+7

디스크에 수정 작업을 반드시 수행 할 필요는 없지만 'InputStream' /'Reader' 필터링을 제공하여 작동합니다. 특히 큰 파일의 경우 (또는 URL에서 XML을 읽는 경우) 매우 유용 할 수 있습니다. 'SequenceInputStream'은 여기에서 유용 할 수 있습니다 : http://java.sun.com/javase/6/docs/api/java/io/SequenceInputStream.html –

+0

좋은 posibility. 은 구문 분석을 쉽게 수행 할 수 없습니까? parse() 코드를 해제하고 잘 작성되지 않은 상태를 무시하도록 덮어 쓸 수 있습니까? – Haythem

+2

Haythem : 파서가 라이브러리 내부에 깊숙이있어 브라우저의 동작이 정의되지 않았을 수 있습니다 (XML 라이브러리는 두 개 이상의 루트 요소로 XML을 처리하는 방법을 알지 못합니다). 이 방법을 사용하면 XML을 즉시 형식화 할 수 있으며 모든 ** XML 인식 도구가 갑자기이를 잘 처리 할 수 ​​있습니다 (다른 잘못된 부분이 없다면). –

1

힌트 : 색소 또는 stax를 사용하면 FIRST "잘 형성됨"오류가 발생할 때까지 제대로 작성되지 않은 xml 문서를 성공적으로 파싱 할 수 있습니다. DOM을 사용하면 XML 파일 다음 트리를 구축 스캔으로

(나는 ...이 너무 많이 도움이되지 것을 알고)

0

, 트리의 루트 노드는 같은 1 대답 같다. 그러나 파서가를 찾지 못하면 심지어 나무를 만들 수도 있습니다. 따라서 XML 파일을 DOM이나 Sax로 파싱하기 전에 사전 처리하는 것이 더 좋습니다.

관련 문제