我正在使用Jaxb来解析xml。在xml文件中,我有如下定义的项目列表:
<item>
<currency_name>US Dollar</currency_code>
<currency_code>USD</currency_code>
<rate>3,0223</rate>
</item>
当我在xsd文件中放入以下行时:
<xsd:element name="rate" type="xsd:string" minOccurs="1" maxOccurs="1"/>
我得到3,0223作为字符串值,但是当我把:
<xsd:element name="rate" type="xsd:double/BigDecimal/float" minOccurs="1" maxOccurs="1"/>
然后我收到0.0 / null。 我认为问题出在“,”分隔符中。 如何将速率值解组为BigDecimal?
答案 0 :(得分:0)
如果您是从XML Schema生成模型,则可以使用以下方法为您的用例生成XmlAdapter
。
格式化程序对象
您需要使用可以将字符串转换为BigDecimal
的方法创建一个类。
public class BigDecimalFormatter {
public static String printBigDecimal(BigDecimal value) {
// TODO - Conversion logic
}
public static BigDecimal parseBigDecimal(String value) {
// TODO - Conversion logic
}
}
外部绑定文档(bindings.xml)
外部绑定文档用于指定在将XML字符串转换为BigDecimal
属性时使用自定义转换类。
<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">
<jxb:bindings schemaLocation="schema.xsd">
<jxb:bindings node="//xs:element[@name='rate']">
<jxb:property>
<jxb:baseType>
<jxb:javaType name="java.math.BigDecimal"
parseMethod="forum20711223.BigDecimalFormatter.parseBigDecimal" printMethod="forum20711223.BigDecimalFormatter.printBigDecimal" />
</jxb:baseType>
</jxb:property>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
XJC致电
-b
标志用于引用外部绑定文档。
xjc -b binding.xml schema.xsd
完整示例