如何在不创建POJO的情况下映射标签的值?

时间:2018-08-23 12:47:00

标签: java xml jaxb unmarshalling

我有以下XML字符串形式的

<INSTANCE number="4" price="254.00">
    <DESCRIPTION value="test"/>
    <QUANTITY value="10"/>
    <TOTALPRICE value="2540.00"/>
</INSTANCE>

我正在尝试使用JAXB将其映射到对象,为此我创建了以下POJO 这是我用来映射上述XML的类

@XmlRootElement(name = "INSTANCE")
@XmlAccessorType(value = javax.xml.bind.annotation.XmlAccessType.FIELD)
public class InstancePriceExtended {

    @XmlAttribute(name = "number")
    private String number;
    @XmlAttribute(name = "price")
    private double price;

    @XmlAttribute(name = "DESCRIPTION")
    private String description;
    @XmlAttribute(name = "QUANTITY")
    private String quantity;
    @XmlAttribute(name = "TOTALPRICE")
    private String totalPrice;

    @Override
    public String toString() {
        StringBuilder toStringBuilder;
        toStringBuilder = new StringBuilder("InstancePriceExtended{");
        toStringBuilder.append("number=").append(this.number);
        toStringBuilder.append(",price=").append(this.price);
        toStringBuilder.append(",description=").append(this.description);
        toStringBuilder.append(",quantity=").append(this.quantity);
        toStringBuilder.append(",totalPrice=").append(this.totalPrice);
        toStringBuilder.append('}');
        return toStringBuilder.toString();
    }
}

这是我终于得到的答复

InstancePriceExtended{number=4,price=254.00,description=null,quantity=null,totalPrice=null}

从以上描述中可以明显看出,数量,总价已设置为空。 如何在不为每个变量创建单独的POJO的情况下获取设置给这些变量的值?

注意:无法修改xml结构

EDIT1:我还尝试将注释从XmlAttribute更改为XmlElement,而不仅仅是原始XML中的属性

@XmlElement(name="DESCRIPTION")
private String description;
@XmlElement(name="QUANTITY")
private long quantity;
@XmlElement(name="TOTALPRICE")
private double totalPrice;

此后,我得到的结果如下 InstancePriceExtended {number = 4,price = 7704.0,description =,quantity = 0,totalPrice = 0.0}

1 个答案:

答案 0 :(得分:0)

由于您无法更改XML布局,并且在XML布局中,您的多个字段都映射到元素(不是属性),因此需要 not 专门告诉JAXB在属性中寻找它们。 (默认情况下,它会寻找所需的子元素;尽管您可能仍需要使用@XmlElement批注来映射元素名称,因为IIRC涉及的所有内容都区分大小写。)