2015-04-03 45 views
1

我想解析具有相同结构但名称不同的.xml文件。我使用maven从.xsd文件自动生成java类来解析xml文件。我需要能够自动生成大部分类,但使用一些预先创建的类。这将允许我提取一些业务逻辑并避免重复。考虑下面的两个xml示例:如何使用常见的类从Maven生成JAXB

<x> 
    <y> 
     <d attribute="value1"/> 
    </y> 
    <y> 
     <d attribute="value2"/> 
    </y> 
</x> 


<b> 
    <c> 
     <d attribute="value1"/> 
    </c> 
    <c> 
     <d attribute="value2"/> 
    </c> 
</b> 

节点“y”和“c”具有相同的结构但名称不同。我想能够创建一个不同的类“W”,可以用来解析这两个XML文件。然后,当Maven自动生成发生而不是创建类“Y”和“C”时,它将使用我的类“W”并将其应用于两个节点。这可以手动通过创建具有类似于此的结构的类来完成:

public class x { 
    @XmlType("y") 
    private List<W> w; 
} 

public class W { 
    private D d; 
} 

public class B { 
    @XmlType("c") 
    private List<W> w; 
} 

有各约10 xsd文件用10k-20K线,从而延伸在充分情况下,这例如是不可行的。有任何想法吗?如果此功能在其他地方退出,我将对其他xml解析框架开放。

注: 我尝试使用.xjb与impl类绑定。它期望impl类是生成的类的子类型,这是我寻找的对立关系。

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

    <jaxb:bindings schemaLocation="example.xsd" node="/xs:schema"> 
     <jaxb:bindings node="//xs:element[@name='y']"> 
      <jaxb:class implClass="W"/> 
     </jaxb:bindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

回答

2
  • 定义复杂的类型,请yx元素。
  • 写自己实现这种类型的(例如:com.acme.foo.W
  • 使用<jaxb:class ref="com.acme.foo.W"/>这种类型的结合告诉JAXB,而不是使用生成一个新类的W类。

参见:

JAXB: Prevent classes from being regenerated

相关问题