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