Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xml架构验证未找到验证错误_C#_Xml_C# 3.0_Xsd_Xml Parsing - Fatal编程技术网

C# Xml架构验证未找到验证错误

C# Xml架构验证未找到验证错误,c#,xml,c#-3.0,xsd,xml-parsing,C#,Xml,C# 3.0,Xsd,Xml Parsing,我试图根据Xml文件的模式验证它。 这是我的代码: private readonly List<string> validationErrors = new List<string>(); public bool TryValidate(string xml, string schemaLocation, ref List<string> errors) { var document = new XmlDocu

我试图根据Xml文件的模式验证它。 这是我的代码:

 private readonly List<string> validationErrors = new List<string>();

 public bool TryValidate(string xml, string schemaLocation, ref List<string> errors)
    {          
        var document = new XmlDocument();
        document.LoadXml(xml);

        var schemaReader = new XmlTextReader(schemaLocation);

        var settings = new XmlReaderSettings {CloseInput = true};
        settings.ValidationEventHandler += Handler;
        settings.ValidationType = ValidationType.Schema;
        settings.Schemas.Add(null, schemaReader);

        var stringReader = new StringReader(xml);

        using (var validatingReader = XmlReader.Create(stringReader, settings))
        {
            while (validatingReader.Read())
            {
            }
        }

        errors = validationErrors;

        return errors.Count == 0;
    }

    private const string Format = "Line: {0}, Position: {1} \"{2}\"";
    private void Handler(object sender, ValidationEventArgs e)
    {
        if (e.Severity != XmlSeverityType.Error)
        {
            return;
        }

        validationErrors.Add(string.Format(Format,
                                           e.Exception.LineNumber,
                                           e.Exception.LinePosition,
                                           e.Exception.Message));

    }
private readonly List validationErrors=new List();
public bool TryValidate(字符串xml、字符串模式位置、引用列表错误)
{          
var document=新的XmlDocument();
LoadXml(xml);
var schemaReader=新的XmlTextReader(schemaLocation);
var设置=新的XmlReaderSettings{CloseInput=true};
settings.ValidationEventHandler+=处理程序;
settings.ValidationType=ValidationType.Schema;
settings.Schemas.Add(null,schemaAreder);
var stringReader=新的stringReader(xml);
使用(var validatingReader=XmlReader.Create(stringReader,设置))
{
while(validatingReader.Read())
{
}
}
错误=验证错误;
返回错误。计数==0;
}
private const string Format=“行:{0},位置:{1}\”{2}\”;
私有无效处理程序(对象发送方、ValidationEventArgs e)
{
如果(例如严重性!=XmlSeverityType.Error)
{
回来
}
validationErrors.Add(string.Format(Format,
e、 例外。行号,
e、 例外。行位置,
e、 例外情况(信息));
}
架构对BusinessType元素有以下限制:

        <xs:element name="BusinessType">                                              
            <xs:simpleType>                                              
            <xs:restriction base="xs:string">                                        
            <xs:maxLength value="15"/>                                               
            <xs:enumeration value="not specified"/>                                                  
            <xs:enumeration value="Sole trader"/>                                                
            <xs:enumeration value="Partnership"/>
            <xs:enumeration value="Limited company"/>                                                    
            </xs:restriction>                                        
            </xs:simpleType>
            <xs:element>

但实际的Xml实例文件包含一个零元素:

          <BusinessType>0</BusinessType>
0
然而,当我运行验证代码时,它通过了模式验证(即没有发现错误)? 编辑-作为一个测试,我还完全重命名了其中一个元素,但它仍然没有生成错误

有人知道为什么会这样吗


非常感谢

我尝试了您的示例代码并得到了预期的结果:“BusinessType”元素无效-值“0”根据其数据类型“String”无效-枚举约束失败。“是否验证了与预期不同的Xml文档?嗨,Filburt,我刚刚发现,如果xml实例文件的根元素中有一个xmlns:ns1=“”>。验证再次开始工作!