2013-05-13 8 views
0

파싱 큰 XML 파일 (500 - 800MB) 그런 stax2를 사용하여 :stax2 XMLInputFactory2를 사용할 때 어떻게 입력 스트림을 변환 할 수 있습니까?

XMLStreamReader2 reader = (XMLStreamReader2) xmlif2.createXMLStreamReader(fileName, new FileInputStream(fileName)); 

특정 CSV로 변환하고 다음 문제를 가지고. 일부 텍스트 노드는 "& # x1;"을 포함합니다. 순서. 출력 파일에서 키릴 문자 "Ё"로 바꿔야합니다.

[com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxParsingException : 잘못된 문자 엔티티 :; 파서 그 순서 "& #의 1 개"를 발견했을 때, 그것은 던져 예외입니다 . I는 동일한 예외가 STAX에서

[행 (COL), 시스템 ID]에서 확장 문자 (코드 0x1로

수 I는 XML 스트림 리더 일부 transforation을 설정 & # X1에 교체; 지동차를 Е 할 구문 분석 중에 모든 파일을 대체 할 수있는 중간 파일을 만들 수 있지만 구문 분석하지는 않지만 좋은 생각은 아닙니다.

답변

0

오류 메시지는 XML 형식이 잘못되었음을 나타냅니다. 인코딩이 잘못되었습니다. 값이 0x1 인 유니 코드 문자에 대한 엔티티 참조가 들어있는 것 같습니다. XML 1.0에는 사용할 수 없습니다. XML 1.1에 대해서는 합법적 일 것입니다. 하지만 XML 문서가 XML 선언에 "version = '1.0'"을 선언하지 않았습니까?

+0

XML 파일은 다음 헤더가 '' 이 모두 교체보다 구문 분석하기 전에 그렇게 좋을 것이다 XML 버전 해결 문제로 변경하는 경우  시퀀스 – Leonid

+0

오른쪽에서는 XML 1.0에서 문자 엔터티가 제어 문자 (lf/cr/tab을 제외한 0x1 - 0x1F)를 참조하는 것을 허용하지 않습니다. 따라서 1.0에서 1.1로 변경해보고 문제를 피해야합니다. – StaxMan

+1

도움이되었습니다. 감사 – Leonid