使用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
发布于 2012-02-13 22:48:27
这个问题的表述有误。下面是正确的问题和答案:
<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
发布于 2012-02-11 02:36:54
你用<xs:choice>来表达什么呢?xs:choice声明了复杂类型的子元素,可以是ExternalAddress也可以是InternalAddress。但是从您的Scala代码判断,您可能正在尝试表示一个地址类型,该类型可以是外部的,也可以是内部的。
在这种情况下,复杂类型扩展是可行的。有关USAddress扩展Address的示例,请参阅http://scalaxb.org/running-scalaxb。这将生成Address和USAddress都是超类型的Addressable特征。
https://stackoverflow.com/questions/9231596
复制相似问题