2012-08-06 55 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