xml - XSD 任意元素任意顺序任意次数

标签 xml xsd xsd-validation

我已经尝试了所有 <xs:all>, <xs:choice>, and <xs:sequence>

这些都不能令人满意地帮助我的案例。

有谁知道你会如何验证这样的事情。

<Menu>  
   <SubMenu>
      <MenuItem .. />  
      <MenuItem .. />  
      <MenuItem .. />  
   </SubMenu>  
   <MenuItem .. >  
   <MenuItem .. >  
</Menu>

在哪里, 下<Menu>标签 <SubMenu>和/或 <MenuItem>可以以任何顺序出现任意次数(0-n)。 但至少其中之一必须至少出现一次。

忽略 SubMenu 标签内的验证。

非常感谢在此问题上的任何帮助。

最佳答案

如果我正确理解了您的要求,那么您可以将该模型表述为“其中一个 SubMenu 或 MenuItem 后跟零个或多个 SubMenu 或 MenuItem 元素”。这可以很容易地表示为两个选择的序列:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <!-- whatever your element needs to be modelled as here -->
    <xs:element name="MenuItem">
        <xs:complexType>
            <xs:attribute name="text"/>
        </xs:complexType>
    </xs:element>

   <!-- only modelling the structure of the child elements here -->
    <xs:element name="SubMenu">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Menu">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
                <xs:choice minOccurs="1" maxOccurs="unbounded">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
            </xs:sequence>          
        </xs:complexType>
    </xs:element>
</xs:schema>

您可以使用 Menu 和 SubMenu 的共享全局类型更清晰地对此进行建模,但我希望这种方式相对明显。

关于xml - XSD 任意元素任意顺序任意次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3716449/

相关文章:

ruby rexml 获取子元素

PHP 访问 XML 同级标签的属性

python - 如何使用 lxml 验证 XSD 架构,但忽略与给定模式匹配的元素?

visual-studio - 如何在 Visual Studio 中导出和导入 XSD 文件?

xml - 如何验证 mule esb 中的架构?

java - 使用架构问题的 XSD 验证

根据枚举值设置需要的 xsd 属性

java - java如何解析XML文件

android - textview 不居中

xml - XSDs - 如何拥有一个可能为负整数也可以为空的整数