2013-07-03 2 views
0

이 주제에 대해 많은 좋은 질문을 발견했습니다. 불행히도 대답은 모두 xsd 파일을 사용한다고 말합니다. xsd.exe를 사용하여 xml 파일에서 xsd 파일을 만들었습니다. here의 코드를 복사하여 Visual Studio에 붙여 넣으면 첫 번째 줄에 오류가 있습니다.xsd 파일없이 XML 파일 유효성 확인

내가 왜 실행되지 않을지 알아내는 데 시간을 낭비하고 싶지 않아 직접 유효성 검사를 코딩하기로 결정했습니다. 여기

은 내가 사용하고있는 두 지점입니다 : 왼쪽과 오른쪽 캐럿의 동일한 양들이 될 파일의 ​​끝에 있도록

  1. 각각 왼쪽 캐럿, 오른쪽 캐럿이있을 것이다. 파일의 끝에

  2. , I 중 하나는 왼쪽 캐럿의 양, 또는 오른쪽 캐럿의 양 (헤더 백 슬래시가 없기 때문에) 전체에서 하나를 빼기를 가지고에 의해 전체를 분할하는 경우 둘, 나는 슬래시의 수를 얻는다.

일부 문제가 발생합니다.

  1. 나는이 방법은 속성 (내가 원하지 않는)에있는 캐럿을 계산) (string.count를 사용하고 있습니다.

  2. 파일을 읽었을 때 예상되는 백 슬래시 수를 계산합니다. 숫자가 일치하지 않으면 "예상되는 슬래시 수가 일치하지 않습니다"라고 쓰지만 파일에있는 위치를 모르겠습니다.

나는 지금이 문제를 해결할 방법을 생각할 수 없습니다.

누구나 xsd 파일을 사용하지 않고 xml 파일의 유효성을 검사하는 더 나은 방법이 있습니까?

+8

이 문맥에서 유효성 검사는 무엇을 의미합니까? 이 파일이 어떤 종류의 유효한 XML 파일인지 확인하려면 'XDocument.Load'가 트릭을 수행합니다. 특정 제약 조건 세트와 일치하도록하려면 XSD와 같은 것이 이상적입니다. 제게 XSD 예제를 발견하고, 컴파일하는데 어려움을 겪었으며, 수동 파싱으로 바로 넘어갔습니다. 더 좋은 방법이 있습니다 (총'<'/'> '를 잘못 계산할 경우).하지만 중요한 요소는 입력 파일의 요구 사항입니다. – Guvante

+7

바퀴를 재발 명하지 마십시오. xsd의 문제점을 찾아 내면 장기적으로 더 간단해질 것입니다. 날 믿어. –

+7

XML 유효성을 검사하지 않습니다. 여러분은 단지'<>'의 쌍을 세는 것입니다. 이것은 같은 것이 아닙니다. XSD는 데이터 형식의 유효성을 검사하고 필수 요소가 포함되도록합니다. 유효성 검사는 기본 XML 구문 분석기에 XML을로드하는 것보다 간단합니다. 시간과 노력을 낭비하는 대신 XSD를 수정해야합니다. –

답변

5

올바른 형식의 XML은 유효한 XML과 다릅니다.

XML 표준을 준수하는 XML은 올바른 형식으로 간주되지만 DTD를 준수하는 XML은 유효한 것으로 간주됩니다.

try 
{ 
    var file = "Your xml path"; 

    var settings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore, XmlResolver = null }; 

    using (var reader = XmlReader.Create(new StreamReader(file), settings)) 
    { 
     var document = new XmlDocument(); 
     document.Load(reader); 
    } 
} 

catch (Exception exc) 
{ 
    //show the exception here 
} 

P.S을 : 잘 XML의 적격성은 항상 유효한 XML의 전제 조건입니다

XML이 잘 형성되면 그냥 이것을 시도 확인하려면

.

희망이 있습니다.

+0

+1하지만 XmlDocument.Load (filename)를 제안하지 않는 이유가 궁금하십니까? –

+0

고맙습니다. 이 작품은 내가 생각해 내려고했던 혼란보다 훨씬 낫다. –

1

"캐럿"이라고 말하면 "<"및 ">"기호에 대해 이야기해야한다고 생각합니다. XML 세계에서 일반적으로 "꺾쇠 괄호"라고합니다.

캐럿이 일치하는지 확인하는 과정에서 파일이 XML 구문을 준수하는지 여부에 대해 이야기하고 있습니다. 이는 XML 세계에서 "올바른 형식 확인"이라고 불립니다. 유효성 검사는 다른 것과 깊은 차이가 있습니다. 유효성 검사에는 스키마 (XSD 스키마 또는 다른 종류)가 필요하지만 올바른 형식 확인을 위해서는 XML 파서 만 있으면됩니다.

직접 체력 검사를 구현하지 마십시오.(a) 쉬운 일이 아니기 때문에, (b) 파서가 기성품으로 쉽게 구할 수 있고, (c) 문제에 대해 매우 잘 이해하지 못했기 때문에. XML 파서를 통해 파일을 실행하면 작업이 자동으로 수행됩니다.

+0

어떤 XML 파서를 사용해야합니까? –

+0

운전을해야하는 자동차를 묻는 것과 조금 다릅니다. 데이터의 형식이 올바른지 확인하기를 원할 경우 매우 전문화 된 요구 사항이없는 한 가장 가까운 형식을 사용하십시오. –