在complexType中具有多个元素

时间:2019-01-21 13:55:24

标签: xml xsd

所以我想为我的XML文件编写一个XML模式。我现在遇到的问题是我有一个元素,但我想在其中包含多个元素,但没有声明该数量。这样我就可以使用程序添加或删除元素,以保持文件动态。

我对xml和xml架构还很陌生,所以我现在不从哪里开始。 这就是我到目前为止所获得的-它一次只能让我在盘子上用餐,但是如上所述,我想要多个没有特定数量的食物。

Schema:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="menu">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="starter">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="dish" type="dish"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
...
</xsd:schema>

XML:
<menu>
<starter>
    <dish>
        <name> 
            Salad
        </name>
        <price>
            4.00
        </price>
    </dish>
    <dish>
        <name>
            Bread
        </name>
        <price>
            2.50
        </price>
    </dish>
</starter>

最后,我的目标是能够根据需要添加和删除尽可能多的盘子标签。但是验证者说,在第一个孩子之后就没有孩子了。

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了答案!

如果您使用选择标记并将maxOccurs属性设置为unbounded,则可能会有无限的标记。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="menu">
<xsd:complexType>
    <xsd:choice maxOccurs="unbounded">
        <xsd:element name="starter">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="dish" type="dish"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:choice>
</xsd:complexType>
...
</xsd:schema>