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进行验证的XML_C#_Xml_Xsd - Fatal编程技术网

C# 删除不针对XSD进行验证的XML

C# 删除不针对XSD进行验证的XML,c#,xml,xsd,C#,Xml,Xsd,我有一个XML和XSD 我遇到的问题是,如果一个元素\属性在上载过程中失败,则不会上载任何内容。因此,使用XSD,我想在上传之前去掉所有无效的“行” 如果以以下内容为例: 但是它只删除第一个错误部分,如果以后有错误部分,SchemaInfo.Validity值是未知的我认为唯一的方法是使用您自己的代码手动验证XML 由于XSD的可能结构和可能发生的错误,创建一个能够始终跳过错误并继续的验证器将非常困难,因此我所知道的任何解析器都没有这样做 在某些情况下,他们会在出错后继续验证,但通常会忽略初始

我有一个XML和XSD

我遇到的问题是,如果一个元素\属性在上载过程中失败,则不会上载任何内容。因此,使用XSD,我想在上传之前去掉所有无效的“行”

如果以以下内容为例:


但是它只删除第一个错误部分,如果以后有错误部分,SchemaInfo.Validity值是未知的

我认为唯一的方法是使用您自己的代码手动验证XML

由于XSD的可能结构和可能发生的错误,创建一个能够始终跳过错误并继续的验证器将非常困难,因此我所知道的任何解析器都没有这样做

在某些情况下,他们会在出错后继续验证,但通常会忽略初始错误后的所有同级,以便返回到更一致的状态。基本上,一旦遇到错误,通常会出现多个验证路径,因为验证状态变得不明确

这就是说,如果您的数据与示例中的数据一致,并且您对XSD有一定的控制权,那么您可以将的XSD定义重构为根元素,然后在需要的地方使用元素引用。然后可以一次加载每个元素,并在运行时验证每个元素。这样,读取文档的代码将与每个文档的验证断开连接,因此,如果其中一个文档无效,您将丢弃它并转到下一个文档

注意:这种方法意味着XML文档的其余部分没有经过验证

<Row>

    <Column1>1</Column1>

    <Column2>2</Column2>

</Row>

<Row>

    <Column1>1</Column1>

    <Column2>2</Column2>

</Row>

<Row>

    <Column1>1</Column1>

    **<Column2>**B**</Column2>**
</Row>
<Row>

    <Column1>1</Column1>

    **<Column2>**C**</Column2>**
</Row>
 foreach (XmlElement row in doc.SelectNodes("TableName/Row"))
            {
                if (row.SchemaInfo.Validity == XmlSchemaValidity.Invalid)
                {
                    row.ParentNode.RemoveChild(row);
                }
            }