如何在 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
属性] 标签代替。不过,在这种情况下并没有什么区别,因为序列中只有一个元素。
我有一个 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
属性] 标签代替。不过,在这种情况下并没有什么区别,因为序列中只有一个元素。