Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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#_.net_Xml_Xsd - Fatal编程技术网

C# 不使用XSD验证XML

C# 不使用XSD验证XML,c#,.net,xml,xsd,C#,.net,Xml,Xsd,我有一个XML文件,需要有一些特定的标记,如果没有这些标记,我就无法处理该文件。如何确定这些标记是否存在,我尝试使用XSD验证,但文件格式不断变化,它们不断发送我不需要处理文件的附加标记,但拥有这些附加标记不会损害我的处理过程 是否有一种方法可以编写XSD,使其只查找少数标记而忽略其他标记?您可以创建一个XSD,其中包含所需的所有元素。默认情况下,元素具有minOccurs=1,这意味着它是必需的。然后,为了忽略所有其他元素,您需要添加,这基本上意味着xml可能包含任意数量的不需要验证的附加元素

我有一个XML文件,需要有一些特定的标记,如果没有这些标记,我就无法处理该文件。如何确定这些标记是否存在,我尝试使用XSD验证,但文件格式不断变化,它们不断发送我不需要处理文件的附加标记,但拥有这些附加标记不会损害我的处理过程


是否有一种方法可以编写XSD,使其只查找少数标记而忽略其他标记?

您可以创建一个XSD,其中包含所需的所有元素。默认情况下,元素具有
minOccurs=1
,这意味着它是必需的。然后,为了忽略所有其他元素,您需要添加
,这基本上意味着xml可能包含任意数量的不需要验证的附加元素。

考虑放弃XSD,而是针对xml编写XPath检查,以测试XSD的已知不变属性。当您有一个已知的、相对静态的语法时,XSD会更好。特殊XPath断言或Schematron对于无法保存的XML来说更适合于使用明确的语法。

如果它是格式良好的XML,可以将XML加载到XDocument中,然后使用linq查询您感兴趣的元素。如果元素不存在,查询将返回null。您还可以在linq查询中使用.Any(),它返回一个bool来确定元素是否存在。而且,说到
Any
可以添加到XML模式中,以使其对读取的内容不那么挑剔。它将匹配架构中在其级别显示的任何内容。@Flydog57-是否需要在所有序列级别添加任何内容?