1

我有一个 XML 模式,我知道一个元素必须有一个特定的子元素,但我不知道该子元素将存在的深度。以以下示例 XML 为例:

<node id="top">
   <node id="inner">
     <event/>
   </node>
</node>

<node id="top">
   <event/>
</node>

我唯一的要求是<event>元素必须是元素的后代<node id="top">,但我不知道它会在什么深度出现。换句话说,<node id="inner">在顶部<node id="top">和一个元素之间可以有任意数量的<event>元素。在上面的示例中,这些中的每一个在架构中都是有效的。我尝试的解决方案是:

<xs:element name="node">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="node" minOccurs="0">
                <xs:complexType>
                     <xs:sequence>
                        <xs:element name="event"/>
                     </xs:sequence>
                   <xs:attribute name="id" fixed="inner"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
      </xs:complexType>
      <xs:attribute name="id" fixed="top"/>
</xs:element>

但是,正如预期的那样,这并没有考虑到<node>元素之后可能出现的许多元素“深度” <node id="top">

4

1 回答 1

0

这是回答!试试下面的东西

<?xml version="1.0"?> 
<xs:schema targetNamespace="http://test"
  elementFormDefault="qualified" attributeFormDefault="unqualified"
  xmlns:test="http://test"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="nodes">   
      <xs:complexType> 
           <xs:sequence minOccurs="0" maxOccurs="unbounded">
                   <xs:element name="node"  type="test:nodeType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
 </xs:complexType> 
  </xs:element>

<xs:complexType name="nodeType">  
                <xs:sequence minOccurs="0" maxOccurs="unbounded">
                           <xs:element name="event" minOccurs="0"/>
                           <xs:element name="node" type="test:nodeType" minOccurs="0">

</xs:schema>
于 2013-03-07T02:27:18.560 回答