我正在尝试这样做:我有一个XML文件,我想根据XSD文件进行验证。 到目前为止,上帝......我要做的就是提供所有节点,验证错误在哪里。
例如,我有这个XML文件:
<people>
<name>Jonh</name>
<tel>91991919199191919</tel>
</people>
当我验证此文件时,这将在tel节点中出错。 我希望将该名称提供给我的应用程序的最终用户以及XML中的错误。
我很想在C#.NET中做到这一点。
感谢您的帮助...
答案 0 :(得分:3)
此代码针对XSD文件验证XML文件,并返回带行号的错误。
public static void ValidateXML(Stream stream)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("", "yourXSDPath");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(stream, settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);
document.Validate(eventHandler);
reader.Close();
}
static void ValidationEventHandler(object sender, ValidationEventArgs e)
{}
try
{
ValidateXML(yourXMLStream);
}
catch (XmlSchemaValidationException ex)
{
Console.WriteLine(String.Format("Line {0}, position {1}: {2}", ex.Message, ex.LineNumber, ex.LinePosition));
}
答案 1 :(得分:2)
你能使用.NET 3.5吗?如果是,您可以使用XDocument
上的Validate
扩展程序并提供ValidationEventHandler
。验证失败后,将使用ValidationEventArgs
调用您的处理程序,您可以使用{{}}来查找错误的位置。
答案 2 :(得分:1)
验证错误通常显示为XmlSchemaException - 您可以捕获这些错误并使用Message属性向用户报告这些错误。
答案 3 :(得分:0)
看看Schematron。它非常适合这种验证。 虽然您可以使用Schema进行验证,但Schematron只使用XSL并生成一个XML文档,其中包含可以使用户友好的验证消息。