XML模式下深度未知的保证子元素

XML模式下深度未知的保证子元素,xml,xsd,Xml,Xsd,我有一个XML模式,其中我知道元素必须有一个特定的子元素,但我不知道该子元素的存在深度。以下面的XML为例: <node id="top"> <node id="inner"> <event/> </node> </node> <node id="top"> <event/> </node> 我唯一的要求是元素必须是元素的后代,但我不知道它将出现在什么深度。换句话说

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

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

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

我唯一的要求是
元素必须是
元素的后代,但我不知道它将出现在什么深度。换句话说,在顶部
元素之间可以有任意数量的
元素。在上面的例子中,每一个在模式中都是有效的。我尝试的解决方案是:

<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>

但是,正如预期的那样,这并没有考虑到
元素之后可能出现的许多
元素的“深度”。

这是!试试下面的方法

<?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>

这太棒了!试试下面的方法

<?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>


看起来这大部分是重复的。这个问题的简单答案是,您必须指定maxOccurs=“unbounded”以获得未知的递归深度。看起来这大部分是重复的。这个问题的简单答案是,必须指定maxOccurs=“unbounded”以获得未知的递归深度。