2012-10-15 68 views
1

我需要使用描述結構的JAXB解析XML。例如。它可以是這樣的:解析Java中的自定義結構

<structure name="s1"> 
<integer value="15" name="i1" /> 
<structure name="s1_1"> 
    <string value="hello" /> 
</structure> 
</structure> 

正如你所看到的,結構可以嵌套。所以我的問題是:

  1. 什麼是Java
  2. 表示這樣的結構如何能使用JAXB解析的最佳實踐?

UPD:結構可以包含幾個不同的項目(整數,字符串,浮點數,數組/等),我不能對它的內容做出假設。我只知道可能的字段類型,但不知道它們的數量或順序。

+0

你到目前爲止嘗試過什麼?你喜歡什麼樣的對象模型?你想要不同的類來表示'integer','string'等。元素的順序是否顯着?你想要整數元素的值作爲整數存儲嗎? –

+0

目前我認爲可能的解決方案之一是將結構表示爲字段列表,其中字段是由它的類型和值組成的對象,也可以鏈接到另一個列表等等。但我不確定這種方法的效率。在這種情況下訪問這些結構也會有問題。 –

回答

0

如何:

class Structure 
{ 
    String name; 
    Integer value; 
    Structure child; 
    // or 
    Set<Structure> children; 
} 

與JAXB幾乎減少了使用上面的類JAXB工具,併產生相應的存根/代理/不管和飼料適當的XML轉換成編組解析 - 有大量SO和其他地方的例子。

乾杯,

0

創建Structure類。馬克它使用JAXB註釋:

@XmlRootElement(name = "structure") 
public class Structure { 
    @XmlElement(name = "integer") 
    private IntegerValue integer; 
    @XmlElement(name = "string") 
    private StringValue string; 

    // add default constructor, getters and setters 
} 

創建類IntegerValueStringValue那套int和串並使用@XmlAttribute

現在您已經準備好將這與JAXB結合使用。

這是一個例子,如何序列化的對象到XML:

Structure s = new Structure(); 
//............... 
JAXBContext ctx = JAXBContext.newInstance("com.yourcompany.yourpackage"); 
ctx.createMarshaller().marshal(s, System.out); 

反序列化使用Unmarshaller