是否可以“有条件”验证XSD文件中的XML节点?也就是说,是否根据父节点名称进行验证?
例如:
<?xml version="1.0"?>
<rootNode>
<parentA>
<value>Some text</value>
</parentA>
<parentB>
<value>Some text</value>
</parentB>
</rootNode>
在value
中使用的parentA
的验证如下:
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
在value
中使用的parentB
的验证会有所不同:
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="4"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
答案 0 :(得分:3)
是的,即使在XSD 1.0中,本地声明的元素的类型也可以根据父元素提供的上下文而有所不同:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="rootNode">
<xs:complexType>
<xs:sequence>
<xs:element name="ParentA">
<xs:complexType>
<xs:sequence>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ParentB">
<xs:complexType>
<xs:sequence>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="4"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
value
中的ParentA
元素与value
中的ParentB
元素具有不同的类型。