2010-11-24 9 views
0

I 성공적으로 XSD 스키마에 대해 XML 파일의 유효성을 검사하는 다음 코드가 있습니다XML 파일에서 XSD 오류의 파일 위치를 가져 오는 방법은 무엇입니까?

Try 

     Dim val As New Xml.XmlReaderSettings With {.ValidationType = ValidationType.Schema} 
     val.Schemas.Add(Nothing, "myvalidator.xsd") 

     Using reader = XmlReader.Create("myfile.xml", val) 
      While reader.Read 
      End While 
     End Using 

     Console.WriteLine("XML validation succeeded.") 

    Catch ex As Exception 
     Console.WriteLine("XML validation failed." & vbCr & vbLf & "Error Message: " & ex.Message) 
    End Try 

내가 갖는 샘플 오류입니다

내가 가진 큰 XML 파일의 유효성을 검사하고있어
The element 'address' has invalid child element 'zip_code'. List of possible elements expected: 'address_line_2, address_line_3, city'. 

각각 여러 주소가있는 수백 명의 회원이 문제를 정확하게 지적하기에 충분하지 않습니다. 행 번호 나 파일 위치 또는 다른 유용한 데이터를 가져 와서 원본 XML 파일에서 문제가 발생한 위치를 정확히 알 수있는 방법이 있습니까? XmlReader가 텍스트 판독기와 동일한 방식으로 파일을 읽지 않는다는 것을 알았습니다. XML은 형식이 잘되거나 한 거대한 행에있을 수 있으므로 행 번호가 반드시 이동하지는 않습니다. 내가 문제가 무엇인지 알기 위해 While 루프 안에서 뭔가를 할 수 있어야하지만, 아직 발견하지 못했던 것처럼 보일 것입니다.

답변

1

먼저 "ex.Message"를 사용하지 마십시오. 최상위 예외의 텍스트 만 보여줍니다. Ex.ToString()을 대신 사용하십시오.

둘째, 예외가 발생했을 때 XmlReader의 속성을 살펴보십시오. 또한 전달중인 XmlException의 모든 속성을주의 깊게 살펴보십시오. 그것은 LineNumberLinePosition 속성을가집니다.

+0

완벽합니다. 특정 오류 유형을 트래핑하는 것을 잊어 버렸기 때문에 일반적인 XmlSchemaValidationException 처리기가 아닌 일반 Exception 처리기의 속성 만보고 있었기 때문에 LineNumber 및 LinePosition과 같은 추가 속성을 볼 수 없었습니다. 필요한 것. 감사! – gfrizzle

관련 문제