我有这样的XML:
...
<result name="Result" test="xpto" cat="2"/>
<result name="ExecuteTest" test="xpto"/>
<result name="Result" test="xpto" cat="1"/>
<result name="CloseTest" test="xpto"/>
...
我目前的XSD是这样的:
<xs:element name="result" maxOccurs="unbounded" minOccurs="1">
<xs:complexType mixed="true">
<xs:attribute type="xs:string" name="name" use="required"/>
<xs:attribute type="xs:string" name="test" use="required"/>
<xs:attribute type="xs:string" name="cat" use="optional"/>
</xs:complexType>
</xs:element>
我想在我的XSD文件中验证,如果在我的XML文件中第一个元素<result>
具有value="Result"
并且具有属性cat="..."
。有可能吗?
答案 0 :(得分:0)
首先,XML不能有多个根元素,因此将result
元素包装在一个共同的单个根元素中:
<results>
<result name="Result" test="xpto" cat="2"/>
<result name="ExecuteTest" test="xpto"/>
<result name="Result" test="xpto" cat="1"/>
<result name="CloseTest" test="xpto"/>
</results>
其次,使用具有name
属性的通用元素名称的XML设计很差。相反,请考虑:
<results>
<Result test="xpto" cat="2"/>
<ExecuteTest test="xpto"/>
<Result test="xpto" cat="1"/>
<CloseTest test="xpto"/>
</results>
最后,决定上述XML设计之一以及您是否将使用XSD 1.0或1.1:
XSD 1.0无法代表您对XML A的约束。
XSD 1.0可以代表XML B所有Result
元素必须
具有固定值的(必需或可选)cat
属性
2
。
XSD 1.1可以代表您对带有条件的XML A的约束 键入Assignment,但也需要断言才能生成语句 关于定位。
XSD 1.1可以单独为XML A或XML B使用断言。