提出xml验证错误

时间:2009-12-29 13:07:09

标签: c# xml validation xsd

我正在尝试这样做:我有一个XML文件,我想根据XSD文件进行验证。 到目前为止,上帝......我要做的就是提供所有节点,验证错误在哪里。

例如,我有这个XML文件:

<people>
   <name>Jonh</name>
   <tel>91991919199191919</tel>
</people>

当我验证此文件时,这将在tel节点中出错。 我希望将该名称提供给我的应用程序的最终用户以及XML中的错误。

我很想在C#.NET中做到这一点。

感谢您的帮助...

4 个答案:

答案 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文档,其中包含可以使用户友好的验证消息。