如何根据现有的.xsd文件验证现有的xml文件

本文关键字:文件 验证 xml 何根 xsd | 更新日期: 2023-09-27 18:09:01

我试图根据现有的。xsd文件验证一个现有的。xml文件。因此,这两个文件都在我的bin文件夹中。然而,我的方法只是有麻烦找到我的。xsd文件。它找到.xml文件,然后对它进行验证,因为它显然找不到.xsd文件。我认为这可能有两个原因之一,

  1. 我不应该把。xsd文件放在bin文件或

  2. 我没有正确地添加。xsd文件与settings.Schemas.Add("VM", "v.config.xsd");,因为我不太确定第一个字符串参数"VM"做什么。我使用了v.config.xsd中定义为name="VM"的参数。

可能不是因为这两个原因(这是我第一次这样做),所以任何指针都是受欢迎的。下面是我的方法:

public void Validate()
    {
        try
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.Schemas.Add("VM", "v.config.xsd");
            settings.ValidationType = ValidationType.Schema;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
            settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
            XmlReader reader = XmlReader.Create("output.xml", settings);
            XmlDocument document = new XmlDocument();
            document.Load(reader);
            ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationCallback);
            document.Validate(eventHandler);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
    private static void ValidationCallback(object sender, ValidationEventArgs args)
    {
        if (args.Severity == XmlSeverityType.Warning)
            Console.WriteLine("'tWarning: Matching schema not found.  No validation occurred." + args.Message);
        else
            Console.WriteLine("'tValidation error: " + args.Message);
    }

返回的错误信息是:

 Warning: Matching schema not found.  No validation occurred.Could not find schema information for the element 'element1'
 Warning: Matching schema not found.  No validation occurred.Could not find schema information for the element 'element2'

并且它为"output"文件中的每个元素输出此消息

如何根据现有的.xsd文件验证现有的xml文件

您的应用程序实际上在bin文件夹中找到xsd文件,但是,正如这里所描述的,方法签名

Settings.Schemas.Add("schema", "v.config.xsd");

尝试根据模式模式

验证XML

如果xml中的模式名是urn:pippo,尝试使用

Settings.Schemas.Add("urn:pippo", "v.config.xsd");