2010-07-23 2 views
1

을 허용합니다 :구성의 Xerces SAX 파서는 잘못 생성 된 XML 문서를 구문 분석 할 때 나는이 오류를 얻고있는 XML 구문 오류

org.xml.sax.SAXParseException: The value of attribute "bar" associated with an element type "foo" must not contain the '<' character. 

내가 문제를 일으키는 것을 알고있다. 그것은이 라인이다 : 그것은 있었어야

<foo bar="x<y">42</foo> 

<foo bar="x&lt;y">42</foo> 

나는이 유효한 XML이 아니라, 내 코드를 다운로드하고 무인 유사한 파일을 구문 분석하고 정치적 이유가 수도하는 것을 알고 특히 다른 프로그램이 파일을 읽고이 오류를 허용 할 때 공급자에게 오류있는 프로그램을 수정하도록 설득 할 수 없습니다.

Xerces를 허용하도록 구성 할 수있는 방법이 있습니까? 현재 치명적 오류로 취급합니다. ErrorHandler을 구현하면 문서의 나머지 부분이 파싱되지 않기 때문에 만족스럽지 않습니다.

또는이 오류를 허용하도록 구성 할 수있는 다른 스트림 기반 파서를 제안 할 수 있습니까? 이러한 문서가 수백 메가 바이트로 실행되므로 DOM 파서를 사용할 수 없습니다.

+2

이것은 정치적인 문제입니다. 기술적 인 것이 아니라 정치적인 해결책이 필요합니다. –

+1

Xerces에서 허용하지 않을 수도 있지만 jsoup (https://jsoup.org/)와 같은 대체 라이브러리가이 경우에 더 적합 할 수 있습니다. 그것은 원래 HTML 용으로 설계된 것처럼 보이지만 버그가있는 XML에서 데이터를 성공적으로 읽는 데 사용했습니다. http://stackoverflow.com/questions/9886531/how-to-parse-xml-with-jsoup –

답변

4

이런 종류의 오류를 견딜 수있는 XML 파서를 찾지 못할 것이라고 생각합니다. 내가 제안 할 수있는 유일한 것은 발생할 수있는 오류를 제거하기 위해 XML을 사전 처리하는 것입니다.

+2

사전 처리에 관한 재미있는 점은 제시된 예제에서 사용되는 것에 대해 생각하면 이해해야한다는 것입니다 즉, 새로운 노드의 시작과 같은 다양한 XML 컨텍스트. 즉, 컨텍스트에서 XML 인코딩의 필요성을 인식하고 적용 할 수있는 기본 XML 구문 분석 논리 자체를 수행해야합니다. OP가 원하는 것처럼 "관대 한"XML 파서를 작성하는 것처럼 보입니다. –

+1

@Vineet. 문제는 그것이 일반적인 방법으로 수행 될 수 없다는 것입니다. 전처리는 벤더 XML이 어떻게 보일 것인가에 대한 @ finnw의 지식, 관찰 된 실수의 체계화, 그리고 패턴 기반 매칭과 수정에 기반하여 수행 될 필요가있다. @ finnw의 지식을 사용하지 않으면, 가능한 많은 수정이있을 수 있으며 가상의 오류 허용 파서가 올바른 것을 고를 수있는 방법이 없을 수 있습니다. –

+0

@Stephen, 전처리가 블랭킷 솔루션이 될 수없는 이유입니다. 정규 표현식과 다른 스키마를 사용하여 이러한 오류를 발견 할 수 있지만 임의의 속성 값이나 텍스트 노드에서 임의적으로 발생할 수 있다면 무엇을 할 수 있습니까? –

5

... 정치적 이유가 결함이있는 프로그램을 해결하기 위해 공급 업체를 설득하는 것이 가능하지 않을 수도 있습니다 ... 정치적 이유로

당신은 시도 한다고하여을 damnedest 것은 그들을 얻을 수 있습니다 그것을 해결하기 위해. 입력 앞에 형식이 올바른 XML이 있어야한다는 요구 사항을 웨이브에 올리십시오. 맞춤식 파서를 개발하는 데 드는 비용을 청구합니다. (OK, 아마도 작동하지 않을 것입니다 ...)

싸움없이 포기함으로써 앞으로이 공급 업체와 거래해야하는 다른 사람들에게 문제를 남기고 있습니다.