使用逗号作为小数分隔符的Jaxb转换数字

时间:2013-12-20 20:11:11

标签: java xml jaxb xsd

我正在使用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?

1 个答案:

答案 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

完整示例