java - 如何在不创建 POJO 的情况下映射标签的值?
问题描述
我有以下字符串形式的 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}
解决方案
由于您无法更改 XML 布局,并且在 XML 布局中,您的一些字段映射到元素(而不是属性),因此您无需专门告诉 JAXB 在属性中查找它们。(默认情况下,它会寻找子元素,这是您想要的;尽管您可能仍需要使用 @XmlElement 注释来获取要映射的元素名称,因为 IIRC 所涉及的所有内容都可能区分大小写。)
推荐阅读
- xpath - Getting single element with similar xpaths but with different same level, "neighboring" node
- android - 如何在android中重定向端口?
- apache-kafka - avro.io.AvroTypeException:数据 [object] 不是模式的示例
- python - 将大型 wav 文件(或任何大型文件)读取/处理到 python 的最快方法
- android - 如何避免在 DayNight 模式下重新启动更改方向的活动?
- machine-learning - H20 自动编码器异常仅接受数值预测器
- java - EL1008E:(pos 5): 在“java.util.LinkedHashMap”类型的对象上找不到属性或字段“customerid” - 可能不是公开的?
- kotlin - 如何从 Kotlin 中的函数返回布尔值
- android - 约束布局与滚动视图高度不匹配
- testing - 尽管没有任何错误但元素未打开,但 Click() 不起作用 - (赛普拉斯自动化)