Elr*_*roy 11 c# validation xsd
以下代码帮助我验证具有XSD架构的XML文件.
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, xsdFilePath);
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);
XmlDocument document = new XmlDocument();
document.Load(xmlFilePath);
XmlReader rdr = XmlReader.Create(new StringReader(document.InnerXml), settings);
while (rdr.Read())
{
}
isValid = true;
Run Code Online (Sandbox Code Playgroud)
ValidationEventHandler还告诉我错误是什么,但没有告诉我他们所在的"哪里"或"在哪一行".有没有办法获得XML无法验证的行号?
Von*_*onC 28
这不是你做的事情吗?
创建一个
XmlReaderSettings对象并通过该对象启用警告.不幸的是,似乎无法将自己的
XmlReaderSettings对象传递给XmlDocument.Validate().
相反,您可以使用验证XmlReader和XmlNodeReader验证现有XmlDocument(使用XmlNodeReaderwithStringReader而不是anXmlDocument)
XmlDocument x = new XmlDocument();
x.LoadXml(XmlSource);
XmlReaderSettings settings = new XmlReaderSettings();
settings.CloseInput = true;
settings.ValidationEventHandler += Handler;
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(null, ExtendedTreeViewSchema);
settings.ValidationFlags =
XmlSchemaValidationFlags.ReportValidationWarnings |
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ProcessInlineSchema |
XmlSchemaValidationFlags.ProcessSchemaLocation ;
StringReader r = new StringReader(XmlSource);
using (XmlReader validatingReader = XmlReader.Create(r, settings)) {
while (validatingReader.Read()) { /* just loop through document */ }
}
Run Code Online (Sandbox Code Playgroud)
和处理程序:
private static void Handler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Error || e.Severity == XmlSeverityType.Warning)
System.Diagnostics.Trace.WriteLine(
String.Format("Line: {0}, Position: {1} \"{2}\"",
e.Exception.LineNumber, e.Exception.LinePosition, e.Exception.Message));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30183 次 |
| 最近记录: |