2011-12-01 62 views
4

可以说我有一个Java类,如下所示JAXB标签内

public class Foo { 

    public ... getKitchen(){} 

    public ... getRoom(){} 

    public ... getInnerPart(){} 

    public ... getUpperPart(){} 

    public ... getBasement(){} 

    ... 
    ... 
} 

,我想这样的

<foo> 
    <house> 
    <kitchen>value<kitchen> 
    <basement>value<basement> 
    <room>value<room> 
    <house> 
    <innerPart>value<innerPart> 
    <upperPart>value<upperPart> 
<foo> 

XML输出将在JAXB注解是什么样子我的课吗? 谢谢。

回答

3

注:我是EclipseLink JAXB (MOXy)铅和JAXB 2 (JSR-222)专家小组的成员。

您可以使用莫西的@XmlPath扩展实现这种映射:

import javax.xml.bind.annotation.*; 
import org.eclipse.persistence.oxm.annotations.XmlPath; 

@XmlRootElement 
@XmlType(propOrder={"kitchen", "basement", "room", "innerPart", "upperPart"}) 
public class Foo { 

    @XmlPath("house/kitchen/text()") 
    public ... getKitchen(){} 

    @XmlPath("house/room/text()") 
    public ... getRoom(){} 

    public ... getInnerPart(){} 

    public ... getUpperPart(){} 

    @XmlPath("house/basement/text()") 
    public ... getBasement(){} 

    ... 
    ... 
} 

更多信息

+0

有没有办法只用JRE 7提供的JAXB JSR-222呢?我将很难让MOXY进入内部网络,我们的大部分课程都主要使用JaxB,现在很难切换。谢谢。 –

+0

您可以使用几种不同的策略。您可以将文档映射到接近的位置,并使用样式表转换为所需的结果。 JAXB通过提供可与javax.xml.transform API配合使用的“JAXBSource”和“JAXBResult”与XSLT协同工作。您也可以使用StAX使用JAXB。例如在Unmarshal上,你可以使用StreamFiler来消除'house'元素。 MOXy是一个兼容的JAXB(JSR-222)实现。您可以使用jaxb.properties启用单个模型。 –

+0

谢谢布莱斯! –