为什么我的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?