Java simpleframework转换元素

Java simpleframework转换元素,java,xml,simple-framework,Java,Xml,Simple Framework,我有下节课 @Root @Convert(RecordConverter.class) public class Record { public static final String DATE = "Date"; public static final String ID = "Id"; public static final String NOMINAL = "Nominal"; public sta

我有下节课

@Root
@Convert(RecordConverter.class)
public class Record {
    public static final String DATE = "Date";
    public static final String ID = "Id";
    public static final String NOMINAL = "Nominal";
    public static final String VALUE = "Value";

    @Attribute(name = DATE)
    String date;
    @Attribute(name = ID)
    String id;
    @Element(name = NOMINAL)
    int nominal;
    @Element(name = VALUE)
    String value;
}
我想对我的“值”使用转换器,因为它类似于字符串,但我需要它作为BigDecimal。但是@Converter或“Converter”不适用于@Element,只适用于@Attributes

记录XML示例

<Record Date="05.03.2020" Id="R01235">
    <Nominal>1</Nominal>
    <Value>66,0784</Value>
</Record>

1.
66,0784
RecordConverter类是

public class RecordConverter implements Converter<Record> {
    Record record;

    public Record read(InputNode node) throws Exception {
        record = new Record();
        record.setDate(node.getAttribute(DATE).getValue());
        record.setId(node.getAttribute(ID).getValue());
        if (node.getAttribute(NOMINAL) != null) {
            record.setNominal(Integer.parseInt(node.getAttribute(NOMINAL).getValue()));
        } else {
            record.setNominal(1);
        }
        if (node.getAttribute(VALUE) != null) {
            record.setValue(node.getAttribute(VALUE).getValue());
        } else {
            record.setValue("qw");
        }
        return record;
    }

    public void write(OutputNode node, Record value) throws Exception {
        throw new UnsupportedOperationException("Not ready converter yet");
    }
}
公共类RecordConverter实现转换器{
记录;
公共记录读取(InputNode节点)引发异常{
记录=新记录();
record.setDate(node.getAttribute(DATE.getValue());
record.setId(node.getAttribute(ID).getValue());
if(node.getAttribute(标称)!=null){
record.setNominal(Integer.parseInt(node.getAttribute(NOMINAL.getValue()));
}否则{
记录。设定标称值(1);
}
if(node.getAttribute(VALUE)!=null){
record.setValue(node.getAttribute(VALUE.getValue());
}否则{
记录设定值(“qw”);
}
返回记录;
}
公共无效写入(OutputNode节点,记录值)引发异常{
抛出新的UnsupportedOperationException(“尚未准备好转换器”);
}
}
但是,我在这里找不到任何“名义”或“价值”


我的问题是如何将我的值从字符串660784转换为BigDecimal 66.0784?

尽管我自己从未使用过简单的XML序列化框架。 但是从它的API来看,您可以使用
InputNode#getNext()
InputNode#getNext(String)
Converter
中自己遍历
InputNode

例如:

公共记录读取(InputNode)引发异常{
最终记录=新记录();
record.setDate(node.getAttribute(DATE.getValue());
record.setId(node.getAttribute(ID).getValue());
//默认值
记录。设定标称值(1);
record.setValue(BigDecimal.ONE);
for(InputNode next=node.getNext();next!=null;next=node.getNext()){
开关(next.getName()){
案例名称:
record.setNominal(Integer.parseInt(next.getValue());
打破
案例价值:
record.setValue(新的BigDecimal(next.getValue());
打破
}
}
返回记录;
}
注意,默认值也可以直接在model
Record
类中设置,如下所示:

Record.java

    ...
    @Element(name = NOMINAL)
    int nominal = 1;
    @Element(name = VALUE)
    BigDecimal value = BigDecimal.ONE;
    ...

它可以工作,但实际上我已经通过调试器尝试过了,并且得到了NPE:)无论如何,谢谢。