Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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# 针对xsd和CRLF字符的Xml验证_C#_Xml_Xsd_Xsd Validation_Xml Validation - Fatal编程技术网

C# 针对xsd和CRLF字符的Xml验证

C# 针对xsd和CRLF字符的Xml验证,c#,xml,xsd,xsd-validation,xml-validation,C#,Xml,Xsd,Xsd Validation,Xml Validation,我有一段代码,它根据XSD验证XML public void Validate() { XDocument xdoc = XDocument.Load("XML path"); var schemas = new XmlSchemaSet(); schemas.Add(null, "XSD path"); xdoc.Validate(schemas, ValidationCallBack); } p

我有一段代码,它根据XSD验证XML

    public void Validate()
    {
        XDocument xdoc = XDocument.Load("XML path");
        var schemas = new XmlSchemaSet();
        schemas.Add(null, "XSD path");
        xdoc.Validate(schemas, ValidationCallBack);
    }

    private void ValidationCallBack(object sender, ValidationEventArgs args)
    {
        if (args.Severity != XmlSeverityType.Error) 
             return;
        throw new XmlSchemaValidationException(args.Message);
    }
如果xsd中有一个字符串类型的元素,并且有模式([^\t\r\n]*) xml值标记是

     <tagname> There is LF character here
     </tagname>
这里有LF字符
它通过验证,但标记值仅具有尾随的“LF”字符。 它如何在xml验证中无效和失败?
请注意,我无法在xsd中修改此问题有几个有趣的方面

解析和验证XML文档是在一个技术堆栈中完成的,涉及解码、解析、转换为XML信息集(infoset)以及根据XML模式进行验证

  • 在解析之前,XML规范说明(如果显示为CR LF,则删除),只留下LF字符。因此,解析器将不会看到任何CR字符,除非在某些情况下

  • 转换为infoset时,文档元素外部出现的空白(包括LF)(这是我对问题中“拖尾”的理解:属性中也有拖尾空白的概念)被省略。因此,在构建文档的XML信息集时

  • XML模式验证是针对上述信息集执行的,这意味着该模式也不会看到任何尾随空格


因此,检查实例中的尾部CR或LF字符(即使有意义)超出了架构验证的范围,应该在XML处理阶段之前使用其他工具完成。

是否有有效的方法检查是否存在“CR”字符?您只能对未经分析的文档执行此检查。但是,既然XML规范说CR字符无论如何都会被忽略,你为什么要这样做呢?@MichaelKay check这篇文章被修改以获得更多澄清请不要在回答问题后更改它,它会变得非常混乱。您需要向我们展示您的模式,例如,我们需要了解空白方面是什么。建议您开始一个新问题,发布一个小的模式和源文档,让我们重现问题。