Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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# NET中的自定义XML验证逻辑(忽略未定义的元素)_C#_.net_Xml_Xsd_Xml Validation - Fatal编程技术网

C# NET中的自定义XML验证逻辑(忽略未定义的元素)

C# NET中的自定义XML验证逻辑(忽略未定义的元素),c#,.net,xml,xsd,xml-validation,C#,.net,Xml,Xsd,Xml Validation,我有以下问题:我有两个XML文档,它们都是由不同的源系统生成的,虽然它们都有元素ABC,但它们也有源系统生成的不可移动元素 我的问题是:我可以使用一个模式来验证两个稍微不同的XML文件吗 例如: Doc1: <gibberish/> <system_specific_nonsense/> <A> <uselessblock> <B> <ID/> <

我有以下问题:我有两个XML文档,它们都是由不同的源系统生成的,虽然它们都有元素ABC,但它们也有源系统生成的不可移动元素

我的问题是:我可以使用一个模式来验证两个稍微不同的XML文件吗

例如:

Doc1:

<gibberish/>
<system_specific_nonsense/>
<A>
    <uselessblock>
        <B>
            <ID/>
            <name/>
        </B>
    </uselessblock>
</A>

Doc2

<stuff/>
<gobbletygook/>
<lalalalalalalal/>
<A>
    <B>
        <ID/>
        <name/>
    </B>
</A>

有没有一种方法可以让模式只含糊地说:

<A>
    <B>
        <ID/>
        <name/>
    </B>
</A>

换句话说,一个忽略层次深度和无法识别的元素的模式,只是含糊地说“它必须有一个a,其中a的某个地方是aB,B的某个地方是一个ID和一个名称”

这有可能吗?如果没有,我有什么办法可以研究吗

背景信息:我正在从源系统和从系统获取夜间数据。我将源与从系统进行比较,看看两者之间有什么不同,然后将仅更改的数据推送到从系统。为了方便这一点,我希望从任何一个系统中提取的任何数据都通过vague验证运行,因为我的比较代码非常模糊,以至于忽略了层次结构深度


谢谢。

如果这是一个愚蠢的问题,很抱歉,但是您知道无法识别的元素何时会出现吗?如果您这样做,那么您可能可以在您的架构中将它们指定为可选的。@我可以,但问题是我想要一个架构来覆盖这两个文件。或者这就是你的意思?我可以将两者混合到一个模式中,并将它们全部标记为可选的,但是我需要一种方式来表示我需要这样的可选元素a,或者这样的可选元素a,等等。不,垃圾不应该改变。但是,例如,其中一个系统在根中有一个元素数组,而另一个系统必须吐出这些元素,每个元素都封装在根中的一个数组中。你会把这两个都放到你的模式中吗?如何指定必须存在两种类型中的一种?“选择”?是的,我是在暗示使用了一系列的选择元素-对不起-我不知道还有什么其他方法可以实现你的目标!祝你好运@Tor若两者的方案都已知,若验证是你们想要实现的全部,那个么分别验证它们。