我正在尝试使用SimpleXML从Java中解析XML对象中的数据。整个过程的重点是将API从JAXB转换为SimpleXML。因此,我使用了解析文档的注释方式。这是一些代码:
在User类中:
@Element(name="created", required=false)
private Date created;
编写API的程序员使用DateAdapter将从XML中提取的String直接转换为日期。我试图将其转换为SimpleXML。我的假设是变压器采用了相同的方法。这是代码之前和之后的代码......
在:
public class DateAdapter extends XmlAdapter<String, Date> {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public Date unmarshal(String date) throws Exception {
return df.parse(date);
}
public String marshal(Date date) throws Exception {
return df.format(date);
}
}
后:
public class DateAdapter implements Transform<Date> {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public Date read(String date) throws Exception {
return df.parse(date);
}
@Override
public String write(Date date) throws Exception {
return df.format(date);
}
}
我认为我的转换错误,因为我现在收到了Unparsable日期错误。奇怪的是,即使我在读取和写入方法中放置了if-else或try-catch块,我仍然会收到错误。
所以我认为主要的问题是,我如何正确地编写一个像JAXB那样的适配器来对来自XML的String和Date对象进行编组/解组。
答案 0 :(得分:0)
我解决了这个问题。它与我自己编写的API无关,而是在实际XML框架解组时将double转换为日期。存储在XML中的双精度数以秒为单位的纪元时间,小数点为毫秒。 SimpleXML似乎无法正确处理小数。我的解决方法是只需要一个double而不是将数据解组到Date中。所以我摆脱了整个适配器,只是改变了
@Element(name="created", required=false)
private Date created;
到
@Element(name="created", required=false)
private double created;
我确信有一种方法可以将Simple转换为Date之后的事实,但我认为最好保持原样。