gpt4 book ai didi

xml - JAXB 绑定(bind) : dynamic class names for repeated elements

转载 作者:数据小太阳 更新时间:2023-10-29 02:40:05 29 4
gpt4 key购买 nike

我有一个 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 这样的垃圾输出。也许我采取的方法是错误的。欢迎提出任何建议。

最佳答案

这对于您拥有的模式是不可能的。你说 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} 存在时出现,要复杂得多,但你明白了.

我的感觉是:您有另一个问题正在尝试解决,并且您决定拥有这样的编号 类是该(那些)问题的解决方案。如果您首先确定为什么需要此类类(class),我们可能会找到更好的解决方案。

关于xml - JAXB 绑定(bind) : dynamic class names for repeated elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30492980/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com