XSD中的复杂元素验证

时间:2018-03-27 06:10:28

标签: xml xsd xml-parsing xsd-validation

假设我有一个产品列表,每个产品都有两个附加参数来自两个列表。

即。 :

产品:product1,product2等

param1:val1a,val1b等

param2:val2a,val2b等

在我的XML中,我需要输入:

<entry prod="product:element_from_param1:element_from_param1">

<entry prod="product2:val1b:val2a">

是否可以在XSD中验证类似的内容?

提前致谢!

1 个答案:

答案 0 :(得分:0)

是的,您可以将列表编码为正则表达式:

<xs:element name="entry">
    <xs:complexType>
        <xs:attribute name="prod">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:pattern value="(product1|product2):(val1a|val1b):(val2a|val2b)"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:element>

但是,如果可能的话,我建议您更改语法并分解&#34; prod&#34;属性为适当的XML结构(例如,单独的子元素或属性)。

例如:

<xs:element name="entry">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="product">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="product1"/>
                        <xs:enumeration value="product2"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="val1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="val1a"/>
                        <xs:enumeration value="val1b"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="val2">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="val2a"/>
                        <xs:enumeration value="val2b"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>