使用JAXB处理<property key =“name”value =“Foo”>而不是<name> Foo </name> </property>

时间:2011-07-07 07:13:29

标签: java xml jaxb

我的XML看起来像这样:

 <thing>
    <property key='name' value='Foo' />
 </thing>

我想阅读使用JAXB。

我知道我可以做到

@XmlRootElement(name="thing")
public class Thing{

   @XmlElement(name="name")
   public String name;
}

如果XML看起来像

<thing>
   <name>Foo</name>
</thing>

,但我该如何处理上面的XML布局呢?

2 个答案:

答案 0 :(得分:1)

注意:我是EclipseLink JAXB (MOXy)负责人,也是JAXB 2.X(JSR-222)专家组的成员。

您可以在此用例中使用MOXy的@XmlPath扩展名:

@XmlRootElement(name="thing")
public class Thing{

   @XmlPath("property[@key='name']/@value")
   public String name;
}

更多信息:

答案 1 :(得分:0)

如果我没有错,我们需要创建2个类,一个用于物品,另一个用于属性,如下所示

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {"property"})
    @XmlRootElement(name = "thing")
    public class Thing {

        @XmlElement(required = true)
        protected Property property;

        public Property getProperty() {
            return property;
        }

        public void setProperty(Property value) {
            this.property = value;
        }

    }

,另一个班级将是

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "")
    @XmlRootElement(name = "property")
    public class Property {

        @XmlAttribute(required = true)
        protected String key;
        @XmlAttribute(required = true)
        protected String value;

        public String getKey() {
            return key;
        }

        public void setKey(String value) {
            this.key = value;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

    }