首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XJC xs:选择继承

XJC xs:选择继承
EN

Stack Overflow用户
提问于 2012-09-06 05:25:55
回答 1查看 528关注 0票数 1

让xjc生成一个具有维护顺序的选择组扩展的类时,我遇到了一个问题。下面的模式就是一个例子。

代码语言:javascript
复制
<xs:complexType name="base">
  <xs:choice maxOccurs="unbounded">
    <xs:element name="a" />
    <xs:element name="b" />
  </xs:choice>
</xs:complexType>

<xs:complexType name="extended">
  <xs:complexContent>
    <xs:extension base="base">
      <xs:choice>
        <xs:element name="c" />
      </xs:choice>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

问题是,这会导致基类和扩展类都包含列表属性,而不是仅添加到基列表属性,以便在使用以下xml的情况下可以保持顺序:

代码语言:javascript
复制
<extended>
  <a />
  <c />
  <b />
</extended>

我尝试在binding.xjb中将属性名称手动设置为相同的名称,但由于命名冲突而报错。

EN

回答 1

Stack Overflow用户

发布于 2012-09-06 20:51:05

在这里,您希望扩展可能的选择列表,而不是类型。为此,您应该使用如下模式:

代码语言:javascript
复制
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="base">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:group ref="baseGroup"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="extended">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:group ref="extendedGroup"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:group name="baseGroup">
    <xs:choice>
      <xs:element name="a" />
      <xs:element name="b" />
    </xs:choice>
  </xs:group>

  <xs:group name="extendedGroup">
    <xs:choice>
      <xs:group ref="baseGroup" />
      <xs:element name="c" />
    </xs:choice>
  </xs:group>

</xs:schema>

我尝试使用上面的and模式在http://www.xmlvalidation.com/上验证以下文件,它可以正常工作:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>
<extended>
  <a />
  <c />
  <b />
</extended>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12290025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档