0

我试图说服 SimpleXML 将我的 Java 对象与 XML 相互转换。我有一个(看似)简单的问题,但我现在已经浪费了大量时间来搜索描述或示例以执行以下操作:

我需要读取或生成的 XML 格式包含定义颜色并表示为十六进制整数的整数值(但没有前导“0x”,与 HTML 或其他 Android .xml 文件中相同),即 red=" ff0000”、蓝色=“00ff00”、绿色=“0000ff”等。

我的 XML 包含以下元素:

<SomeObject name="foobar" checkedColor="123456" flaggedColor="FEDCBA" ... />

对应的 Java 类为:

public class SomeObject 
{
    @Attribute
    String name;
    @Attribute #######
    int checkedColor;
    @Attribute #######
    int flaggedColor;
    // ...
}

我用上面的####### 标记了我在这里谈论的两个属性。颜色值应为“int”类型。

我如何教 SimpleXML 这些值表示为十六进制字符串以及如何转换它们?我需要编写什么转换器或转换器或任何东西,以便将这些 int 值转换为/从十六进制字符串转换,如图所示,我必须在上面的代码中注释什么才能实现这一点?

4

2 回答 2

0

使用转换,请参阅下面的文档

http://simple.sourceforge.net/download/stream/doc/javadoc/org/simpleframework/xml/transform/Transform.html

于 2013-09-02T10:36:21.010 回答
0

我终于能够通过定义一个类型“HexInt”来实现我想要的,它看起来如下

public class HexInt
{
    private int value;

    public HexInt(int value) {
        setValue(value);
    }
    public HexInt(String value) {
        setValue(value);
    }

    protected int getValue() {
        return this.value;
    }

    protected void setValue(int value) {
        this.value = value;
    }
    protected void setValue(String value) {
        setValue(Integer.parseInt(value, 16));
    }

    @Override
    public String toString() {
        return Integer.toHexString(getValue());     
    }
}

并将相应的属性定义为

...
@Attribute(required=false)
protected HexInt checkedcolor;
@Attribute(required=false)
protected HexInt flaggedcolor;
...

加上定义一个匹配器,它为 HexInt-s 提供了一个相应的转换器,可以正确地将这些值与字符串转换。

但我讨厌这个解决方案的是,我不仅必须注释我的 java 代码来实现这个结果,而且实际上必须使用特殊的、特定于表示的类,即使从程序逻辑来看,绝对不需要定义一个只包含一个int的特殊类,只是因为我想以一种特殊的方式序列化这两个字段。恕我直言,遵循面向方面的精神,内部表示(“int”)应该在基本的 Java 代码中定义,并且该代码应该与外部化时数据的表示方式无关。另一方面,外部表示(即我想将 int-value 表示为十进制还是十六进制字符串)应该只在注释中定义(加上支持类,如 Matcher 和 Transformer),而不是在基本的 Java 代码中定义。

在 SimpleXML 框架中真的没有办法让这些不同的方面更清晰地分开吗?

于 2013-09-04T22:03:12.527 回答