2013-01-11 18 views
0

我在閱讀包含內聯模式驗證的xml文件時遇到此錯誤。 XML文件是這樣的:targetNamespace參數應該與模式的targetNamespace的值相同

<?xml version="1.0" encoding="UTF-8"?> 
<SysConfig xmlns="PM-NameSpace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SysConfig.xsd"> 
... 
</SysConfig> 

的XSD文件是在同一文件夾中的XML文件,被稱爲「SysConfig.xsd」,看起來像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="PM-NameSpace" targetNamespace="PM-NameSpace"> 
... 
</xs:schema> 

我想做的事情在代碼中聯架構驗證,所以我的C#是這樣的:

XmlReaderSettings xmlReaderSettings = new XmlReaderSettings(); 
xmlReaderSettings.ValidationType = ValidationType.Schema; 
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema; 
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; 
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; 
xmlReaderSettings.ValidationEventHandler += new ValidationEventHandler(handler); 
XmlReader xmlReader = XmlReader.Create(sysConfigPath, xmlReaderSettings); 
XmlDocument sysConfigXmlDocument = new XmlDocument(); 
sysConfigXmlDocument.Load(xmlReader); 

一旦負載被稱爲(最後一行)驗證事件處理程序被調用時,實際的消息是:

無法加載名稱空間的模式「' - targetNamespace參數''應該與模式的targetNamespace'PM-NameSpace'相同。

似乎表明某些東西正在使用默認('')名稱空間,但我非常小心地指定了xlmns和目標名稱空間。我不明白「targetNamespace參數」'...'的目標名稱空間屬性是什麼意思,並且不是空白('') - 我不知道什麼是「參數」是用xml術語 - 還是指的是C#代碼中的某些內容(或缺少)? 任何人都可以擺脫任何光線?

回答

1

我還沒有遇到過這個問題,但我相信這是因爲xsi:noNamespaceSchemaLocation是用於實際指示XSD位置的XML,它具有沒有名稱空間。你的XML實際上有一個命名空間,所以我相信你應該更換具有該屬性:

xsi:schemaLocation="PM-NameSpace SysConfig.xsd" 
+0

的邏輯是合理的,但遺憾的是這只是改變了錯誤消息: – Dave

+0

看起來像您的評論可能會被切斷。 – JLRishe

+0

是的。新的錯誤信息是一個怪物:「元素的多重定義」PM-NameSpace:驗證「會導致內容模型變得模糊不清,必須形成一個內容模型,以便在驗證元素信息項序列時,直接包含粒子,間接或含蓄地試圖驗證序列中的每個項目,都可以唯一確定,而不需要檢查該項目的內容或屬性,也沒有關於序列其餘部分中的項目的任何信息。「超出人物和時間(在英國)。謝謝。星期一。 – Dave

相關問題