XML Schema - 如何定义包含字符串或子元素的元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML Schema - 如何定义包含字符串或子元素的元素相关的知识,希望对你有一定的参考价值。
我需要定义一个XML模式。结果应如下所示:
<option value="priority">4</option>
<option value="values">
<value name="x86-32" lang="en-GB" group="root">x86 32-Bit</value>
<value name="x86-64" lang="en-GB" group="root">x86 64-Bit</value>
<value name="ARM" lang="en-GB" group="root">ARM</value>
<value name="PowerPC" lang="en-GB" group="root">PowerPC</value>
<value name="SPARC" lang="en-GB" group="root">SPARC</value>
<value name="PA-RISC" lang="en-GB" group="root">PA-RISC</value>
<value name="DEC-Alpha" lang="en-GB" group="root">DEC Alpha</value>
</option>
<option value="editable">true</option>
因此元素“option”包含一个字符串或一组带有字符串的子元素。我试过这样的事情:
<xs:element name="options" minOccurs="0" maxOccurs="1">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="option" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="value" use="required" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
但验证器不允许这个定义:
cvc-complex-type.2.2:元素'选项'必须没有元素[children],并且该值必须有效。
知道怎么解决吗?
最好的问候,拉德克
答案
好的,我想我已经找到了可接受的(对我而言)解决方案:
<xs:element name="options" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="option" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="attribute" use="required" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="values" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="value" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:anyAttribute/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="attribute" use="required" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
这允许我创建这样的XML文件:
<option attribute="priority">4</option>
<values attribute="fieldOptions">
<value name="x86-32" lang="en-GB" group="root">x86 32-Bit</value>
<value name="x86-64" lang="en-GB" group="root">x86 64-Bit</value>
<value name="ARM" lang="en-GB" group="root">ARM</value>
<value name="PowerPC" lang="en-GB" group="root">PowerPC</value>
<value name="SPARC" lang="en-GB" group="root">SPARC</value>
<value name="PA-RISC" lang="en-GB" group="root">PA-RISC</value>
<value name="DEC-Alpha" lang="en-GB" group="root">DEC Alpha</value>
</values>
<option attribute="editable">true</option>
感谢AllenG的建议:)
以上是关于XML Schema - 如何定义包含字符串或子元素的元素的主要内容,如果未能解决你的问题,请参考以下文章
如何使生成的类包含 XML Schema 文档中的 Javadoc