代码之家  ›  专栏  ›  技术社区  ›  Ricardo Felgueiras

显示xml验证错误

  •  6
  • Ricardo Felgueiras  · 技术社区  · 15 年前

    我正在尝试这样做:我有一个XML文件,我想根据XSD文件验证它。

    例如,我有一个XML文件:

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

    当我验证这个文件时,这将在tel节点中得到一个错误。 我想向应用程序的最终用户展示这个名称,以及XML中的错误。

    我要用C#NET来做这个。

    谢谢你的帮助。。。

    4 回复  |  直到 15 年前
        1
  •  3
  •   jlp    15 年前

    这段代码根据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));
    }
    
        2
  •  2
  •   Jon Skeet    15 年前

    你能使用.NET3.5吗?如果是,您可以使用 Validate XDocument 并提供 ValidationEventHandler . 当验证失败时,将使用 ValidationEventArgs 您可以使用它来查找错误的位置。

        3
  •  1
  •   Oded    15 年前

    XmlSchemaException -您可以捕获这些并使用Message属性向用户报告这些内容。

        4
  •  0
  •   funkymushroom    15 年前

    看看Schematron。这对这类验证很有帮助。 虽然您可以使用Schema进行验证,但Schematron只使用XSL并生成一个XML文档,其中包含验证消息,您可以使其对用户友好。