我有這樣的XML:驗證XML元素屬性值取決於子元素屬性
<generator Mode="High">
<GenMode name="Normal" kV="90" mA="0.5" />
<GenMode name="High" kV="160" mA="0.7" />
</generator>
generator/@mode
應該是有效的,只有當它匹配generator/GenMode/@name
之一。是否可以用XSD 1.0?
現在我使用的XSD文件此規則對於這個元素:
<xs:element name="generator">
<xs:complexType>
<xs:sequence>
<xs:element name="GenMode" maxOccurs="unbounded" type="GenModeType" />
</xs:sequence>
<xs:attribute name="Mode" use="required" type="xs:string"/>
</xs:complexType>
<xs:key name="GenModeName">
<xs:selector xpath="GenMode"/>
<xs:field xpath="@name"/>
</xs:key>
</xs:element>
<xs:complexType name="GenModeType">
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="kV" use="required" type="xs:integer"/>
<xs:attribute name="mA" use="required" type="xs:decimal"/>
</xs:complexType>
你是什麼意思「我想檢查」?如果XML的GenMode具有與生成器/ @模式相同的名稱,那麼它應該是有效的或無效的?如果你想要一個GenMode必須始終與生成器/ @模式具有相同的名稱,那麼可能只能使用XSD 1.1 – sergioFC
@sergioFC'generator/@ mode'只有在其中一個GenMode具有一樣的名字。 –
您將需要使用XSD 1.1。在XSD1.0中我能想到的最好的方法是將generator/@ mode類型定義爲xs:ID,並在GenMode/@模式類型爲xs:IDREF的序列開始時添加一個新元素GenMode。 – sergioFC