【问题标题】:Does XSD allow simpleContent and complexContent at the same time?XSD 是否同时允许 simpleContent 和 complexContent?
【发布时间】:2011-02-21 23:35:24
【问题描述】:

我想为 xmlrpc 规范编写一个 xsd(并使用 jaxb 从中生成 java 类)。 xmlrpc 规范允许以下值:

<value><int>123</int></value>
<value><boolean>1</boolean></value>

但同时它需要:

如果没有指明类型,则类型为字符串。

这意味着我可以收到这样的东西:

<value>test123</value>

相当于

<value><string>test123</string></value>

有没有办法在 xsd 中定义它。

【问题讨论】:

    标签: java xml xsd jaxb xml-rpc


    【解决方案1】:

    是的,在value 上设置混合内容模型:

    <xs:complexType name="valuetype" mixed="true">
      <xs:sequence>
        <xs:element name="int" type="xs:int"/>
        <xs:element name="boolean" type="xs:boolean"/>
        ...
      </xs:sequence>
    </xs:complexType>
    

    【讨论】:

    • 相信不禁止&lt;value&gt;1&lt;boolean&gt;1&lt;/boolean&gt;&lt;/value&gt;
    • @Tomalak:正确。混合的限制不够。
    • and mixed="true" 在java中生成一个List,而不是使用访问器方法的强类型字段。
    • Tomalak 是正确的,这将被允许,但您仍然没有选择的余地。您的类型的基础必须是简单类型(即字符串、整数等)或复杂类型。如果是复杂类型,唯一允许文本的方法就是将其设置为混合。你不能有一个有时是字符串,有时是复杂类型的类型。
    • 至于“Java 中的列表”,我假设您使用的是 JAXB;那么列表将是 String 对象和您的对象的混合,您必须在遍历中使用 instanceof。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多