我需要对包含点和弧的轮廓/多边形定义的XML进行反序列化。
<Pt>
<X>0.0</X>
<Y>0.0</Y>
</Pt>
<Arc>
<X>0.0</X>
<Y>0.0</Y>
<Rad>0.0</Rad>
</Arc>
实际XML文件:
<Profile>
<Pt>...</Pt>
<Pt>...</Pt>
<Arc>...</Arc>
<Pt>...</Pt>
<Arc>...</Arc>
</Profile>
我很难找到解决方案来了解具有不同名称的子元素的顺序。我目前使用的东西看起来像下面的代码,但我显然得到Pts和Arcs的单独数组,而不知道Pts和Arcs的顺序。我尝试创建一个同时接受Pt和Arc的substitutionGroup(Point),但我没有成功。
<xs:element name="Profile">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Pt">
<xs:complexType>
<xs:sequence>
<xs:element name="X" type="xs:decimal" />
<xs:element name="Z" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" name="Arc">
<xs:complexType>
<xs:sequence>
<xs:element name="X" type="xs:decimal" />
<xs:element name="Z" type="xs:decimal" />
<xs:element name="Rad" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
答案 0 :(得分:1)
我想您要允许Pt
和Arc
元素的任意顺序。通过在maxOccurs="unbounded"
声明中设置sequence
,以下架构可以解决这个问题。您还需要更正Pt
和Arc
声明,因为他们目前正在使用Z
而不是Y
,因为您的数据正在使用。
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="pt-type">
<xs:sequence>
<xs:element name="X" type="xs:decimal" />
<xs:element name="Y" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="arc-type">
<xs:sequence>
<xs:element name="X" type="xs:decimal" />
<xs:element name="Y" type="xs:decimal" />
<xs:element name="Rad" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
<xs:element name="Profile">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:choice >
<xs:element name="Pt" type="pt-type"/>
<xs:element name="Arc" type="arc-type"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>