2012-12-11 162 views
1

在下面的XSD示例中,如果「Faron」元素具有「TestMethod」屬性= 1,那麼子元素 faronsettings必須具有屬性「test1 「並有價值。如何根據父元素屬性在xsd中設置子元素屬性

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="Faron"> 
<xs:complexType> 
    <xs:sequence> 
    <xs:element maxOccurs="unbounded" name="Application"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="FaronSettings"> 
      <xs:complexType> 
       <xs:attribute name="test1" type="xs:string" use="optional" /> 
       <xs:attribute name="test2" type="xs:string" use="optional" /> 
       <xs:attribute name="test3" type="xs:string" use="optional" /> 
       <xs:attribute name="test4" type="xs:string" use="optional" /> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     <xs:attribute name="TestMethod" type="TestType" use="required" /> 
     </xs:complexType> 
    </xs:element> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 
<xs:simpleType name="TestType"> 
<xs:restriction base="xs:string"> 
    <xs:minLength value="1" /> 
    <xs:enumeration value="1"/> 
    <xs:enumeration value="2"/> 
    <xs:enumeration value="3"/> 
    <xs:enumeration value="4"/> 
</xs:restriction> 
</xs:simpleType> 
</xs:schema> 
+0

可能重複[XSD:如何根據某個標記的值驗證XML文件?](http://stackoverflow.com/questions/1879652/xsd-how-to-validate-the-xml-file-根據價值的某些標記) –

+0

可能的重複http://stackoverflow.com/questions/4126988/restricting-xml-elements-based-on-another-element-via-xsd/4141569#4141569 –

+0

好吧,所以不可能與XSD ..可能是「Schematron」 – Rusty

回答

0

使用帶有條件類型分配和斷言的XSD 1.1。

或者使用Schematron。

或設計您的詞彙表,以便可以用元素類型表示有效性約束,而不需要對屬性值進行上訴。

你付出你的錢,你選擇。

+0

如何/在哪裏使用XSD 1.1?據我所知,它還沒有用於開發者!如果您知道其在任何SDK(Eclips,MSvisual studio等)中的使用情況,請提供詳細信息 –

+0

Xerces J和Saxon-EE支持XSD 1.1;許多人發現使用Oxygen(它們捆綁這兩個)來管理XSD 1.1驗證很方便。如果你使用的SDK沒有,你可能會考慮遊說維護者前進。 –

+0

啊我用.net!所以現在我要接觸那顆明星!我也無法升級我的系統!無論如何感謝信息! –