如何使用随机元素和固定属性为XML创建XSD

时间:2015-06-23 21:53:35

标签: xml xsd

这是XML文件的摘录,<_0><_7> ... <_100>是随机的,<id><contact_id/><status><is_test_data>是固定的。我需要创建一个XSD文件来验证这个XML

<?xml version="1.0" encoding="UTF-8"?>
<result>
    <result_ok>1</result_ok>
    <total_count>6</total_count>
    <page>1</page>
    <total_pages>1</total_pages>
    <results_per_page>50</results_per_page>
    <data>
        <_0>
            <id>12</id>
            <contact_id/>
            <status>Complete</status>
            <is_test_data>1</is_test_data>
        </_0>
        <_7>
            <id>13</id>
            <contact_id/>
            <status>Complete</status>
            <is_test_data>1</is_test_data>
        </_7>
        <_2>
            <id>14</id>
            <contact_id/>
            <status>Complete</status>
            <is_test_data>1</is_test_data>
        </_2>
        <_6>
            <id>15</id>
            <contact_id/>
            <status>Complete</status>
            <is_test_data>1</is_test_data>
        </_6>
        .
        .
        .
        .
        <_100>
            <id>15</id>
            <contact_id/>
            <status>Complete</status>
            <is_test_data>1</is_test_data>
        </_100>
    </data>
</result>

这是我创建的XSD,但不确定如何为随机元素创建模式

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="apiresult">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="result_ok" type="xs:int" />
                <xs:element name="total_count" type="xs:int" />
                <xs:element name="page" type="xs:int" />
                <xs:element name="total_pages" type="xs:int" />
                <xs:element name="results_per_page" type="xs:int" />
                <xs:element name="data">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="_0">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="id" type="xs:int" />
                                        <xs:element name="contact_id" />
                                        <xs:element name="status" type="xs:string" />
                                        <xs:element name="is_test_data" type="xs:int" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:2)

您无法使用XSD执行此操作。 (除非您基本上使用XSD 1.1断言进行整个验证,但根本不使用XSD)。

如果您想验证这个奇怪的XML,我建议先将其转换为更主流的内容,例如:使用XSLT更改所有元素名称。