2012-01-10 51 views

回答

1

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

对于直接的解决方案,下面假设应为真:

  • A节是公形成XML;您将连接XmlElement节点。例如:

    <部元件...属性内容> ...更多内容 < /节元件>

  • 区段中的每一个被合并具有匹配XML模式集中的全局元素声明。如果对任何部分使用xsi:type属性,事情可能会有点棘手,但不难解决。

验证将是通用的代码,其中XmlReader将是你的串联节点上的XmlNodeReader。像往常一样使用XmlReaderSettings ...

以上将适用于任何XSD(您没有知道XSD的设计时间依赖性)。对于以下任何情况,代码必须与您的XSD匹配...

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

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