2013-10-11 7 views
1

XmlSchemaException이 나에게 던지고 있다는 메시지에 당황 스럽다. 내가 약간의 문맥을 제공하게해라. 내 응용 프로그램에서 "IFU"와 "CC"의 두 가지 유형의 XML 참조 테이블을 사용합니다. 둘 다 자체 스키마가 정의되어 있습니다. 파일을로드 할 때이 스키마를 사용하여 파일의 유효성을 검사하면 완벽하게 작동합니다. 뭔가 잘못 될 때까지.XmlSchemaExeption wrong message

응용 프로그램이 IFU 심판 테이블을 기대하고있다

(IFU 스키마 선택) 나는 오류가 감지 대신 CC 테이블을로드, 행 번호 (2) 적합하지만, 메시지는 말한다 :

전자 .Message = ""CCReferenceTable "요소가 선언되지 않았습니다."

e.Message이 = "는"IFUReferenceTable 말을해야하면서 "요소가 선언되지 않았습니다." 이제

, 코드 조각 :

LoadXML 일상

public XmlDocument LoadXML(string filePath, string schemaFilePath) 
    { 
     Directory.SetCurrentDirectory(System.IO.Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)); 
     if (!DoesFileExist(filePath)) 
      throw new Exception(String.Format("File {0} does not exist.", filePath)); 
     if (!DoesFileExist(schemaFilePath)) 
      throw new Exception(String.Format("File {0} does not exist.", schemaFilePath)); 

     XmlReaderSettings settings = new XmlReaderSettings(); 
     settings.Schemas.Add(null, schemaFilePath); 
     settings.ValidationType = ValidationType.Schema; 

     XmlDocument document = new XmlDocument(); 
     using (XmlReader reader = XmlReader.Create(filePath, settings)) 
     { 
      document.Load(reader); 
     } 
     return document; 
    } 

에 XmlSchema

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="IfuReferenceTable"> 
    //////////Other content 
    </xs:element> 
</xs:schema> 

XML의 refernce를 테이블

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<IfuReferenceTable> 
    //////////Other content 
</IfuReferenceTable> 

참조 테이블은 루트 노드 ("IFUReferenceTable"대신 "CCRefenerceTable")와 동일한 것으로 나타납니다.

무엇이 누락 되었습니까?

답변

0

설명하는 것은 정상적인 진단입니다. 응용 프로그램이 IFU 심판 테이블을 기대하면

이 (IFU 스키마 선택) 나는 오류가 감지 대신 CC 테이블을로드, 라인 수 (2) 적합하지만, 메시지는 말한다 :

이처럼

IfuReferenceTable 스키마를 사용하여 검증하는 파서 (당신이 말한대로, "IFU 스키마 선택") e.Message = "The "CCReferenceTable" element is not declared."

가 더 정의가없는 대한 CCReferenceTable 요소를 발견, 올바르게 불평 할 것이다.

이렇게 생각하십시오. 파서가 CCReferenceTable을 볼 때, 알고있는 내용을 찾아 봅니다. CCReferenceTable. CCReferenceTable에 관한 정보를 찾을 수 없으면 위의 메시지를 통해 알 수 있습니다.

이 요소의 선언 'CCReferenceTable'를 찾을 수 없습니다

는 Xerces에-J는 이런 식으로 말할 것입니다.

아마도이 문장은 좀 더 분명 할 것입니다.

+1

시간 내 주셔서 감사합니다.글쎄, 이제 나는 어리 석다. 꽤 분명했다. 아직도, 그것은 약간 오도하는 것입니다. – MichalW