2012-08-06 60 views
1

我有以下XML:验证架构使用属性

<Root> 
    <SomethingA/> 
    <SomethingB/> 
    <SomethingC/> 
    <SomeOtherThing action="Foo"> 
     <Bar/> 
     <Bar/> 
    </SomeOtherThing> 
    <SomeOtherThing action="Poo"> 
     <BarFoo/> 
     <BarNoo/> 
    </SomeOtherThing> 
</Root> 

我想创建一个架构,将验证,如果该元素是SomeOtherThing,那么如果动作是富子元素只能在酒吧;如果动作是Poo,那么子元素可以是BarFoo(和/或)BarNoo。

关于如何完成(只使用xsd)的任何想法?

此外,解决方案需要在C#上工作。

+0

可能的重复[如何使用模式验证基于属性值的元素?](http://stackoverflow.com/questions/184663/how-can-you-validate-elements-based-on-an -attribute-value-using-a-schema) – rene 2012-08-06 10:49:24

+0

更新问题。我只关心xsd验证解决方案。但无论如何感谢。 – 2012-08-06 13:23:47

回答

0

这种条件验证不能在XSD 1.0中完成。它可以使用名为“条件类型分配”的功能在XSD 1.1中完成。

+0

有没有在Visual Studio中使用XSD 1.1的方法? (2010/2012)在我看来,我发现它不支持它(编辑问题) – 2012-08-06 13:56:22

+0

XSD 1.1目前支持Saxon(9.4)和Apache Xerces(beta)。我知道其他未开发的处理器正在开发中(但不是来自微软)。微软似乎不再有兴趣使他们的XML产品与W3C标准保持同步。 – 2012-08-10 19:50:18