2015-04-03 46 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

相關問題