如何在 XSD 中指定重复元素

How to specify repeated elements in XSD

我有一个 XSD 可以验证我的 XML 文件。问题是它适用于一个元素,但是当我有多个元素时它不起作用,我找不到问题所在。

这是我的 XML 文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <UrlList>
    <url>
        <url>https://www.youtube.com/watch?v=ke92CDVQsb8</url>
        <idUrl>72</idUrl>
        <urlShort>http://short.ly:8080/SOB/url/832261</urlShort>
        <numVisits>2</numVisits>
    </url>
    <url>
        <url>http://moodle.urv.cat/moodle/pluginfil</url>
        <idUrl>73</idUrl>
        <urlShort>http://short.ly:8080/SOB/url/45ea9b</urlShort>
        <numVisits>1</numVisits>
    </url>
</UrlList>

这是我的 XSD 文件:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="UrlList">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="url"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="url">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="url" type="xs:string"/>
                <xs:element name="idUrl" type="xs:integer"/>
                <xs:element name="urlShort" type="xs:string"/>
                <xs:element name="numVisits" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

In an <xs:element> inside an <xs:sequence>, 如果你没有显式指定 maxOccurs 属性,它默认为 1。如果你希望能够有任何数字<UrlList> 中的 <url> 个元素,您应该将架构的该部分更改为如下所示:

<xs:element name="UrlList">
    <xs:complexType>
        <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="url"/>
            <!--        ^^^^^^^^^^^^^^^^^^^^^         -->
        </xs:sequence>
    </xs:complexType>
</xs:element>

如果您只想允许 3 个 <url> 元素,请改用 maxOccurs="3",依此类推。

如果您想指定 all 序列中的元素可以出现多次,您可以在 [=12= 上设置 maxOccurs 属性] 标签代替。不过,在这种情况下并没有什么区别,因为序列中只有一个元素。