我有一个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">
元素的许多“深度”。
答案 0 :(得分:1)
这是answered!尝试类似下面的内容
<?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>