2013-05-21 126 views
0

如何使用jaxb獲取嵌套xml的對象。我有以下XML -使用jaxb的XML解析器

<?xml version="1.0" ?> 
    <file> 
    <markups> 
    <markup> 
     <author>author</author> 
     <name>3w2fg</name> 
     <source>Mobile_iPad</source> 
     <createdOn>2013-05-20T11:22:23</createdOn> 
     <entities> 
      <entity> 
       <entityWdth>209</entityWdth> 
       <entityColor> 
        <red>127.5</red> 
        <green>0</green> 
        <blue>127.5</blue> 
       </entityColor> 
       <entityFillColor> 
        <red>227.5</red> 
        <green>0</green> 
        <blue>327.5</blue> 
       </entityFillColor> 
       <entityRadian>0</entityRadian> 
       <entityEndY>304</entityEndY> 
       <entityStX>438</entityStX> 
       <entityTypeCode>7</entityTypeCode> 
       <entityPageNo>1</entityPageNo> 
       <entityHt>183</entityHt> 
       <entityCenterX>542.5</entityCenterX> 
       <entityName>Rectangle</entityName> 
       <entityStY>121</entityStY> 
       <entityEndX>647</entityEndX> 
       <entityCenterY>212.5</entityCenterY> 
      </entity> 
     </entities> 
    </markup> 
</markups> 
<name>7987ab12-4915-49e5-8bbd-f98d6054ef6b.JPG</name> 
<fileName>IMG_0008.JPG</fileName> 
</file> 

我使用JAXB解組此爲下 -

JAXBContext jbContext = JAXBContext.newInstance(com.arc.markupinfo.generated.File.class); 
com.arc.markupinfo.generated.ObjectFactory factory = new com.arc.markupinfo.generated.ObjectFactory(); 
com.arc.markupinfo.generated.File fileObj = factory.createFile(); 
Unmarshaller unmarshaller = jbContext.createUnmarshaller(); 
fileObj = (com.arc.markupinfo.generated.File) unmarshaller.unmarshal(new File(xmlLocation)); 
fileObj.getFileName(); 

的對象與除entityColor.Red所有值創建...並entityFillColor.Red ....這些值來作爲0,0,0而XML說明它有正確的價值觀

+0

什麼相應的對象模型是什麼樣子? –

回答

1

entityColor.Red ...和... entityFillColor.Red有intInteger)。
使用doubleDouble),floatFloat)或String爲您在顏色對象中的顏色。

@XmlAccessorType(XmlAccessType.FIELD) 
public class Entity 
{ 
    //... 
    private Color entityColor; 
    private Color entityFillColor; 
    //... 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Color 
{ 
    private double red; // or float, or String 
    private double green; // or float, or String 
    private double blue; // or float, or String 
} 

你也可以解組的例子是最簡單的方法:

File file = javax.xml.bind.JAXB 
    .unmarshal(new java.io.File(xmlLocation),File.class);