【问题标题】:scalaxb and xsd:choicescalaxb 和 xsd:选择
【发布时间】:2012-02-10 16:56:30
【问题描述】:

使用http://scalaxb.org/

  <xsd:complexType name="Address">
    <xsd:choice>
      <xsd:element ref="ExternalAddress" />
      <xsd:element ref="InternalAddress" />
    </xsd:choice>
  </xsd:complexType>


val internalAddrress = InternalAddress(...);  // this works.
val address : Address = internalAddrress;     // error: type mismatch

我需要如何修改此代码才能使其正常工作?

这里有一些信息,我玩过 DataRecord 和其他人,但我没有成功。 http://scalaxb.org/narrower-choice

【问题讨论】:

    标签: scala scalaxb


    【解决方案1】:

    问题的表述有误。 这里是正确的问题和答案:

     <xsd:complexType name="Address">
        <xsd:choice>
          <xsd:element name="externalAddress" type="ExternalAddress" />
          <xsd:element name="internalAddress" type="InternalAddress" />
        </xsd:choice>
      </xsd:complexType>
    
    
    val internalAddress = InternalAddress(...);  // this works.
    val address = Address(scalaxb.DataRecord(None, Some("internalAddress"), internalAddress));  // now this works.
    

    https://github.com/eed3si9n/scalaxb/issues/138#issuecomment-3943088

    【讨论】:

    • 什么是InternalAddress?我对你如何通过InternalAddress(...) 构建一个感到困惑。
    【解决方案2】:

    你用&lt;xs:choice&gt; 到底在表达什么? xs:choice 声明可以是 ExternalAddressInternalAddress 的复杂类型的子元素。但是从您的 Scala 代码来看,您可能正在尝试表达一种可以是外部或内部的地址类型。

    在这种情况下,复杂类型扩展是可行的方法。有关 USAddress 扩展 Address 的示例,请参阅 http://scalaxb.org/running-scalaxb。这会生成 Addressable 特征,它们是 AddressUSAddress 的超类型。

    【讨论】:

    • XSD给了我,我不能修改。
    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    相关资源
    最近更新 更多