gpt4 book ai didi

java - 不同 xmls/root 中 JAXB 中子元素的共享类

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

JAXB 中,当使用 xsd 方案中的 xjc 自动生成类时。

alpha.xsd

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="alpha">
<xs:complexType>
<xs:sequence>
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

beta.xml

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="country">
<xs:complexType>
<xs:sequence>
<xs:element name="class">
<xs:complexType>
<xs:sequence>
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

如您所见,这两个方案共享 Person 元素。我想做的是:

  • ObjectFactory 类为两个模式类共享的方式使用 xjc 生成类(输出类将在一个包中)
  • 不使用嵌套静态类(带有属性 localScoping="toplevel")
  • 使用 Person 类与 /alpha/persons/person 绑定(bind),就像与 /country/class/person 绑定(bind)一样,所以没有两个 Person创建的类(class)

这样做的目的是解码一个 xml,应用业务逻辑并创建另一个作为输出,其中某些元素(如 Person)相同并为两个 xml 文件共享。两个文件的命名空间相同。

如果您能向我提供完整的 .xjb 绑定(bind)设置文件,我将不胜感激。到目前为止我的只包含:

<jxb:bindings version="1.0" 
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc">

<jxb:globalBindings localScoping="toplevel"/>
</jxb:bindings>

当然我会收到名称冲突错误,因为我不知道如何设置绑定(bind)编译器以将 Person 视为同一实体/元素。

最佳答案

您可以使用外部绑定(bind)文件来指示在类生成期间我们希望将现有类用于名为 Document 的复杂类型。

binding.xml

<jxb:bindings 
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">

<jxb:bindings schemaLocation="beta.xsd">
<jxb:bindings node="//xs:element[@name='person']/complexType">
<jxb:class ref="alpha.Person"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>

新江西来电

xjc -b binding.xml beta.xsd

关于java - 不同 xmls/root 中 JAXB 中子元素的共享类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19837115/

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