문제
유효성 검사 오류에 대한 더 유용한 정보를 얻을 수 있는 방법이 있나요?XmlSchemaException은 나에게는 거의 이해되지 않는 오류의 줄 번호와 위치를 제공합니다.결국 XML 문서는 일시적인 텍스트 표현에 관한 것이 아닙니다.무엇이 잘못되었는지, 노드 이름(또는 xpath)을 지정하여 문제의 원인을 찾아 해결할 수 있도록 열거된 오류(또는 오류 코드)를 얻고 싶습니다.
편집하다:나는 유효한 XML 문서에 대해 이야기하고 있습니다. 단지 특정 스키마에 대해서는 유효하지 않습니다!
해결책
XmlReaderSettings에 스키마가 포함된 XmlReader를 설정한 다음 이를 사용하여 입력 스트림 노드를 노드별로 읽는 방식으로 이를 수행할 수 있습니다.마지막으로 읽은 노드를 추적하고 유효성 검사 오류가 발생할 때 문서의 현재 위치를 꽤 잘 알 수 있습니다.
내 생각에 이 연습을 해보면 검증 오류가 많이 있다는 것을 알게 될 것입니다(예:필수 요소 누락) 오류 노드의 개념이 별로 의미가 없는 경우입니다.예, 이 경우에는 분명히 오류가 있는 것이 부모 요소입니다. 그러나 실제로 오류를 유발한 것은 독자가 필요한 요소를 보지 못한 채 종료 태그를 발견했기 때문입니다. 이것이 바로 오류 줄과 위치가 종료 태그를 가리키는 이유입니다.
다른 팁
내 경험상, 당신은 라인 번호와 구문 분석 위치를 얻는 것이 운이 좋다.
당신은 할 수있는 dtd를 통해 검증을 고려할 수 있습니다 때때로 그러나 현재 작업중 인 프로젝트에서 약간 더 흥미로운 오류를 제공하면 XSLTS를 사용하여 검증합니다. 변환은 구문을 확인하고 오류를 출력 변환 텍스트로보고합니다. 더 친근한 오류 확인을 원한다면 그 경로를 고려할 것입니다. 우리에게 빈 출력은 오류가 없음을 의미합니다. 그렇지 않으면 XSLT 처리에서 오류가 무엇인지 및 위치에 대한 좋은 세부 사항을 얻습니다.
개인적으로 나는 더 자세한 오류를 얻는 방법을 잘 모르겠습니다. 문서를 형식으로 열고 언급 된 위치로 이동하여 오류를 쉽게 찾을 수 있습니다.
코드가 파일을 유효한 XML로 구문 분석 할 수 없으면 XPATH 또는 기타 이름의 XML 세부 사항을 제공하기가 매우 어렵습니다.
이것은 쉬운 일이 아닌 것 같습니다. Robert Rossney의 답변은 내 문제를 해결하는 프로그래밍 방식에 가장 가깝습니다. XSL 솔루션을 계속 사용하겠습니다. 유효성 검사 오류를 해결하는 더 나은 방법을 찾는 사람은이 스레드에 응답 할 수 있습니다.