为什么我的XMLvalidation失败了它的架构?

我需要针对模式validationXML文件。 XML文件是在代码中生成的,在保存之前我需要validation它是否正确。

我把这个问题解决了它的最基本要素,但我遇到了问题。

XML:

  MRIDDemo 1234 1/1/2005  

架构:

            

ValidationCode :(这段代码来自我编写的一个简单应用程序来测试validation逻辑.XML和XSD文件存储在磁盘上并从那里读取。在实际的应用程序中,XML文件已作为XmlDocument存在于内存中对象和XSD将从内部Web服务器读取。)

 private void Validate() { XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; //settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema; //settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; //settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; settings.ValidationEventHandler += new ValidationEventHandler(OnValidate); XmlSchemaSet schemas = new XmlSchemaSet(); settings.Schemas = schemas; try { schemas.Add(null, schemaPathTextBox.Text); using (XmlReader reader = XmlReader.Create(xmlDocumentPathTextBox.Text, settings)) { validateText.AppendLine("Validating..."); while (reader.Read()) ; validateText.AppendLine("Finished Validating"); textBox1.Text = validateText.ToString(); } } catch (Exception ex) { textBox1.Text = ex.ToString(); } } StringBuilder validateText = new StringBuilder(); private void OnValidate(object sender, ValidationEventArgs e) { switch (e.Severity) { case XmlSeverityType.Error: validateText.AppendLine(string.Format("Error: {0}", e.Message)); break; case XmlSeverityType.Warning: validateText.AppendLine(string.Format("Warning {0}", e.Message)); break; } } 

使用上面定义的XML和XSD文件运行上面的代码时,我得到了这个输出:

validation…错误:命名空间’urn:GenericLabData’中的元素’MRIDSupportingData’在命名空间’urn:GenericLabData’中具有无效的子元素’MRIDNumber’。 预期可能元素列表:’MRIDNumber’。 完成validation

我错过了什么? 据我所知,MRIDNumber是MRIDNumber,为什么会出错呢?

实际的XML文件和XSD一样大,但它在一开始就失败了,所以我把问题简化为几乎没有。

对此的任何帮助都会很棒。

谢谢,
基思


顺便说一句,这些文件确实有效:

XML:

    The Confidence Man  Herman Melville  11.99   

架构:

                           

尝试在XSD文件的xs:schema元素中添加elementFormDefault="qualified"属性。

我认为validation器说它想要一个没有命名空间的MRIDNumber元素,而不是你的MRIDNumber元素和命名空间urn:GenericLabData

在您目前正在测试的XML / XSD摘录中,您是否也在XSD中包含了PrescribedTestDate?