本文介绍了当xml.nsuri与schema.targetnamespace不同时,Net XML验证仅返回警告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我正在尝试验证XML(a.xml):

Hello, I am trying to validate XML (a.xml):

<computer type="s" xmlns="http://aaa.aa1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> </computer>



by schema(a.xsd):


by schema(a.xsd):

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://aaa.aa"> <xs:element name="computer"> </xs:element> </xs:schema>





此文件仅在.net框架(代码低于)中验证,仅警告我nstead errors。我尝试过Stylus,Altova,Java和一些在线验证器,所有这些都返回了验证错误。只有.net框架示例下面会返回警告。 这是一个问题,因为当我决定禁止警告并仅评估错误时,XML会成功验证,但是使用的架构无效。 ( XSD中的targetNamespace与xml中的xnlns不同(w3c是错误的) )。



程序输出:

警告:找不到元素'http://aaa.aa1:computer'的架构信息。

警告:找不到属性'type的架构信息'。

验证完成



带有抑制警告的程序输出:

(删除标志:xmlReadSettings.ValidationFlags | = XmlSchemaValidationFlags.ReportValidationWarnings;)

Walidation complette



我尝试过:





This files are validated in .net framework (code bellow) only with warnings instead errors. I tried Stylus, Altova, Java and some online validators and all of them returned validation errors. Only .net framework sample bellow returns warnings. It is a problem because when i decide to suppress warnings and evaluate only errors, the XML is validated successfully, but it's not valid by used schema. (targetNamespace in XSD is different to xnlns in xml (by w3c it is a error)).

Program output:
Warning: Could not find schema information for the element 'http://aaa.aa1:computer'.
Warning: Could not find schema information for the attribute 'type'.
Validation complete

Program output with suppressed warnings:
(remove flag: xmlReadSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;)
Walidation complette

What I have tried:

private static void ValidateXmlBySchema(string xmlData, string xsdSchema)
        {
            StringReader xmlDataReader = new StringReader(xmlData);
            StringReader schemaReader = new StringReader(xsdSchema);
            XmlSchema schema = XmlSchema.Read(schemaReader, dataValidationEventHandler);
            XmlReaderSettings xmlReadSettings = new XmlReaderSettings();
            xmlReadSettings.ValidationType = ValidationType.Schema;
            xmlReadSettings.ValidationEventHandler += new ValidationEventHandler(dataValidationEventHandler);
            xmlReadSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
//            xmlReadSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
            xmlReadSettings.Schemas.Add(schema);
            XmlReader dataReader = XmlReader.Create(xmlDataReader, xmlReadSettings);
            while (dataReader.Read())
            {
            }
            dataReader.Close();
            Console.WriteLine($"Walidation complette");
        }
        static void dataValidationEventHandler(object sender, ValidationEventArgs e)
        {
            Console.WriteLine($"{e.Severity}: {e.Message}");
        }

推荐答案





这篇关于当xml.nsuri与schema.targetnamespace不同时,Net XML验证仅返回警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-26 20:25