2009-12-29 7 views
4

나는 이것을하려고한다 : XSD 파일에 따라 유효성을 검사하려는 XML 파일이있다. 지금까지 신 ... 내가해야 할 일은 모든 노드에 유효성 검사 오류가있는 것입니다.xml 유효성 검사 오류 표시

<people> 
    <name>Jonh</name> 
    <tel>91991919199191919</tel> 
</people> 

나는이 파일을 검증 할 때, 이것은 전화 노드에 오류가 발생합니다 :

예를 들어 나는이 XML 파일이 있습니다. 그리고 내 응용 프로그램의 최종 사용자에게 이름을 표시하고 그 XML에 대한 잘못된 점을 알려주십시오.

저는 C# .NET에서이 작업을 수행하기 위해 triyng입니다.

감사합니다 ...

+0

xsd 파일을 게시 할 수 있습니까? – Numenor

+0

흥미로운 질문입니다. 높은 수준의 솔루션을 찾았습니까? 라인과 위치로 오류 위치를 해석하지 않고 감각적으로. 감사합니다 – robob

답변

2

.NET 3.5를 사용할 수 있습니까? 그렇다면 XDocumentValidate 확장 방법을 사용하고 ValidationEventHandler을 제공 할 수 있습니다. 유효성 검사가 실패하면 처리기는 ValidationEventArgs과 함께 호출되며 오류의 위치를 ​​찾는 데 사용할 수 있습니다.

+0

예. 나는 .NET 3.5를 사용할 수있다. 예를 들어 주시겠습니까? –

+0

@arpf : 지금은 아니지만, 아니요. 그러나 그것은 아주 자명합니다. 시도해보십시오. 문제가 있으면 시도한 코드로 질문을 편집하십시오. –

+0

줄 번호를 사용하여 XML 문서를 읽는 방법은 무엇입니까? –

1

일반적으로 유효성 검사 오류는 XmlSchemaException으로 나타납니다.이를 catch하고 Message 속성을 사용하여이를 사용자에게보고 할 수 있습니다.

0

Schematron을 살펴보십시오. 이 종류의 검증에 아주 좋습니다. 스키마를 사용하여 유효성을 검사 할 수 있지만 Schematron은 XSL 만 사용하고 사용자에게 친숙하게 할 수있는 유효성 검사 메시지가있는 XML 문서를 생성합니다.

3

이 코드는 XSD 파일에 대한 XML 파일의 유효성을 검사하고 줄 번호와 함께 오류를 반환합니다.

public static void ValidateXML(Stream stream) 
{ 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.Schemas.Add("", "yourXSDPath"); 
    settings.ValidationType = ValidationType.Schema; 
    XmlReader reader = XmlReader.Create(stream, settings); 
    XmlDocument document = new XmlDocument(); 
    document.Load(reader); 
    ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler); 
    document.Validate(eventHandler); 
    reader.Close(); 
} 

static void ValidationEventHandler(object sender, ValidationEventArgs e) 
{} 

try 
{ 
    ValidateXML(yourXMLStream); 
} 

catch (XmlSchemaValidationException ex) 
{ 
    Console.WriteLine(String.Format("Line {0}, position {1}: {2}", ex.Message, ex.LineNumber, ex.LinePosition)); 
} 
+0

고맙습니다, 이건 정말 나를 도왔습니다.하지만 XmlReader의 창조물에 [using] (http://msdn.microsoft.com/en-us/library/yh598w02.aspx)을 사용했습니다. – Natrium

+0

그러면 DTD는 어떻게됩니까? document.Validate를 사용하여 DTD 유효성 검사 설정이있는 이벤트 핸들러의 유효성을 검사 할 수 있다고 생각하지 않습니다. –