2013-10-11 130 views
1

我很困惑XmlSchemaException正在向我拋出一個消息。讓我提供一些背景。 在我的應用程序中,我使用兩種類型的XML參考表:「IFU」和「CC」,都有自己的模式定義。當我加載文件時,我通過使用這些模式來驗證它們,並且它的工作完美。直到出現問題。XmlSchemaExeption錯誤消息

當應用程序被期待IFU REF表(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> 

CC Ref表看起來與根節點相同(「CCRefenerceTable」而不是「IFUReferenceTable」)。

我錯過了什麼?

回答

0

你描述的是一個正常的診斷。

當應用程序被期待IFU REF表(IFU架構 選擇)和I加載CC表代替,當檢測到錯誤時,線 數擬合(2),但該消息說:

e.Message = "The "CCReferenceTable" element is not declared."

當使用IfuReferenceTable模式的驗證解析器(「IFU模式選擇」,像你說的)遇到CCReferenceTable元素,它沒有定義,它將正確抱怨,因爲它沒有。

想想這樣:當解析器看到CCReferenceTable時,它會嘗試查找它知道的關於CCReferenceTable的信息。當它找不到關於CCReferenceTable的任何信息時,它會讓你知道上述消息。

的Xerces-J會這樣說:

找不到元素的聲明 'CCReferenceTable'。

也許這句話更清楚一點。

+1

感謝您花時間回答我的問題。那麼,現在我覺得很傻 - 這很明顯。不過,這有點誤導。 – MichalW