我在閱讀包含內聯模式驗證的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#代碼中的某些內容(或缺少)? 任何人都可以擺脫任何光線?
的邏輯是合理的,但遺憾的是這只是改變了錯誤消息: – Dave
看起來像您的評論可能會被切斷。 – JLRishe
是的。新的錯誤信息是一個怪物:「元素的多重定義」PM-NameSpace:驗證「會導致內容模型變得模糊不清,必須形成一個內容模型,以便在驗證元素信息項序列時,直接包含粒子,間接或含蓄地試圖驗證序列中的每個項目,都可以唯一確定,而不需要檢查該項目的內容或屬性,也沒有關於序列其餘部分中的項目的任何信息。「超出人物和時間(在英國)。謝謝。星期一。 – Dave