繁体   English   中英

具有不同名称的有序子元素的XML模式

[英]XML schema for ordered child elements with different names

我需要反序列化XML,该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的替换组(点),但未成功。

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

我想您想允许PtArc元素的任意顺序。 以下模式将通过在sequence声明中设置maxOccurs="unbounded"来解决问题。 您还必须更正PtArc声明,因为当前它们使用的是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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM