2012-09-08 25 views
1

示例XML文件解组与多个元素同名解组对象

<category> 
    <id>abcat0010000</id> 
    <name>Gift Center</name> 
    <path> 
     <category> 
     <id>cat00000</id> 
     <name>Best Buy</name> 
     </category> 
     <category> 
     <id>abcat0010000</id> 
     <name>Gift Center</name> 
     </category> 
    </path> 
    <subCategories> 
     <category> 
     <id>pcmcat140000050035</id> 
     <name>Capturing Photos &amp; Videos</name> 
     </category> 
     <category> 
     <id>pcmcat140000050036</id> 
     <name>Listening to Digital Music</name> 
     </category> 
     <category> 
     <id>pcmcat140000050037</id> 
     <name>Computing Made Easy</name> 
     </category> 
     <category> 
     <id>pcmcat140000050039</id> 
     <name>Simple GPS Navigation</name> 
     </category> 
     <category> 
     <id>pcmcat140000050040</id> 
     <name>Playing Video Games</name> 
     </category> 
     <category> 
     <id>pcmcat140000050041</id> 
     <name>Watching HDTV</name> 
     </category> 
     <category> 
     <id>pcmcat140000050042</id> 
     <name>Enjoying Favorite Movies</name> 
     </category> 
     <category> 
     <id>abcat0012000</id> 
     <name>Him</name> 
     </category> 
     <category> 
     <id>abcat0013000</id> 
     <name>Teens</name> 
     </category> 
     <category> 
     <id>abcat0014000</id> 
     <name>Kids</name> 
     </category> 
    </subCategories> 
    </category> 

我的Java对象这两种类型的 '类' 之间

@XmlRootElement(name="category") 
    public class Category { 
     String id; 
     String name; 

     public String getId() { 
      return id; 
     } 

     @XmlElement 
     public void setId(String id) { 
      this.id = id; 
     } 

     public String getName() { 
      return name; 
     } 

     @XmlElement 
     public void setName(String name) { 
      this.name = name; 
     } 
    } 

关系是有点混乱

@XmlRootElement("category") 
public class ExtendedCategory extends Category { 
    /*String id; 
    String name;*/ 
    List<Category> path; 
    List<Category> subCategories; 

    /*public String getId() { 
     return id; 
    } 

    @XmlElement 
    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    @XmlElement 
    public void setName(String name) { 
     this.name = name; 
    } 
*/ 
    public List<Category> getPath() { 
     return path; 
    } 

    @XmlElementWrapper(name="path") 
    @XmlElement(name="category", type=Category.class) 
    public void setPath(List<Category> path) { 
     this.path = path; 
    } 

    public List<Category> getSubCategories() { 
     return subCategories; 
    } 

    @XmlElementWrapper(name="subCategories") 
    @XmlElement(name="category", type=Category.class) 
    public void setSubCategories(List<Category> subCategories) { 
     this.subCategories = subCategories; 
    } 
} 

我收到异常,无法将类别投射到ExtendedCategory 如果我将顶级xml元素更改为其他内容(+扩展类别中的+相应更改),则事情正常工作

如何为多个元素解组具有相同名称的对象?

回答

1
@XmlRootElement(name = "category") 
public class Category { 

    String id; 
    String name; 
    List<Category> path; 
    List<Category> subCategories; 

    public String getId() { 
     return id; 
    } 

    @XmlElement 
    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    @XmlElement 
    public void setName(String name) { 
     this.name = name; 
    } 

    public List<Category> getPath() { 
     return path; 
    } 

    @XmlElementWrapper(name = "path") 
    @XmlElement(name = "category", type = Category.class) 
    public void setPath(List<Category> path) { 
     this.path = path; 
    } 

    public List<Category> getSubCategories() { 
     return subCategories; 
    } 

    @XmlElementWrapper(name = "subCategories") 
    @XmlElement(name = "category", type = Category.class) 
    public void setSubCategories(List<Category> subCategories) { 
     this.subCategories = subCategories; 
    } 
} 

我想

Category c = JAXB.unmarshal(new File("yourXml"), Category.class); 

,我得到类别2个pathes和10个小类,像你所需要的。
未来:

JAXB.marshal(c, System.out); 

,我也得到相同的XML就像在你的榜样。

该课程运作良好。对于子类别设置字段pathnull和字段subCategoriesnull

+0

显然,我从来没有尝试过像你这样简单的类。 #FML – user401445