使用c#.net XmlDocument中的模式子集验证xml子集

时间:2012-01-10 10:06:53

标签: c# xml xsd

目前,我有一个解决方案,可以在多个部分中构建XML文档,然后针对单个模式验证最终的连接xml。是否可以使用相同模式的子集来单独验证每个部分?

1 个答案:

答案 0 :(得分:1)

在大多数情况下答案是肯定的。对于免责声明,从理论上讲,有人可能会故意编写一个XML Schema,这会使我的一些建议变得不可能,但那么这在XSD创作中就是不好的做法。

对于简单的解决方案,以下假设应该是正确的:

  • 一个部分是格式良好的XML;您正在连接XmlElement节点。 E.g:

    < section-element ...属性内容 >      ...更多内容 < /部分-组件>

  • 要合并的每个部分在XML Schema集中都有匹配的全局元素声明。如果你对任何部分使用xsi:type属性,事情可能会有点棘手,但不难修复。

验证将是公共代码,其中XmlReader将是您正在连接的节点上的XmlNodeReader。像往常一样使用XmlReaderSettings ......

以上内容适用于任何XSD(您不知道XSD的设计时依赖性)。对于以下任何内容,代码必须与您的XSD匹配......

如果XML Schema中没有匹配的全局元素,那么您必须查看每个匹配的本地元素声明的类型。如果类型是全局的,那么您可以在内存中轻松地创建与全局类型匹配的虚拟元素(假设Venetian Blind创作风格)。

如果这个类型是匿名的(更多的是俄罗斯玩偶风格),那么你甚至可以通过创建一个类型为匿名类型的全局元素来伪造它 - 全部在内存中。