我有一个XSD,其中重复的名称为row
的元素在尝试使用XJC解析时会产生冲突。我想知道是否有方法为每个名称附加索引,以便生成唯一的类名,例如Row1.java
,Row2.java
,Row3.java
等。
sample.xsd
<xsd:complexType name="table">
<xsd:sequence>
<xsd:element name="row" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:integer"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
binding.xml
<jxb:bindings version="2.1"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="sample.xsd">
<jxb:globalBindings localScoping="toplevel" />
<jxb:bindings node=".//xs:element[@name='row']" multiple="true" >
<jxb:class name="RowXX"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
xjc命令
xjc -extension binding.xml sample.xsd
我尝试使用XPath表达式但是我得到像_002f_002fXsElement_005b1_005d.java
这样的垃圾输出。也许我采取的方法是错误的。欢迎任何建议。
答案 0 :(得分:1)
对于您拥有的架构,这是不可能的。你说row
可以重复无限次(给定物理限制)。 xjc应生成多少个类?如果您描述的类确实是您想要的,那么您想要的架构是:
<xsd:complexType name="table">
<xsd:sequence>
<xsd:element name="row1" minOccurs="0">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:integer"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="row2" minOccurs="0">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:integer"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="row3" minOccurs="0">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:integer"/>
</xsd:complexType>
</xsd:element>
...
</xsd:sequence>
</xsd:complexType>
实际上,要确保row{n+1}
仅在row{n}
出现时出现,这是一个更复杂的事情,但你明白了。
我的感觉是:你有另一个问题要解决,你决定拥有这样的编号的类是解决那些(那些)问题的方法。如果您首先确定了这些类的原因,我们可能会找到更好的解决方案。