【问题标题】:How to Map value of a tag without creating a POJO?如何在不创建 POJO 的情况下映射标签的值?
【发布时间】:2018-08-23 12:47:00
【问题描述】:

我有以下 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}

【问题讨论】:

    标签: java xml jaxb unmarshalling


    【解决方案1】:

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

    【讨论】:

    • 我也尝试过使用 & 而不指定 @XmlElement。唯一改变的是我得到了默认值而不是 null
    • @PeeyushPathak ;我无法重现这种行为。我已经多次以这种方式使用 JAXB,并且它从未对文档中的实际值施加默认值。我建议更新您的问题,以充分详细地反映您尝试过的每种方法以及这些尝试的结果,以便可以重现它们。
    • 我试过这个 @XmlElement(name="DESCRIPTION") 私有字符串描述;这就是我得到的 InstancePriceExtended{number=4,price=7704.0,description=,quantity=0,totalPrice=0.0}
    • @PeeyushPathak :添加评论不会更新您的问题,描述您尝试的内容的一行不是“您尝试过的每种方法以及这些尝试的结果,足够详细,以至于他们可以再现”。我的建议仍然存在;如果你不想跟随它,我就退出了。祝你好运。
    • 对不起,我无意失礼;我知道你只是想帮忙。现已更新问题。
    猜你喜欢
    • 2020-08-18
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2011-10-03
    • 1970-01-01
    • 2018-06-18
    • 2023-02-26
    相关资源
    最近更新 更多