我试图说服SimpleXML将我的Java对象转换为XML和从XML转换。我有一个(看似)简单的问题,但我现在已经浪费了大量时间来搜索描述或执行以下操作的示例:
我需要读取或生成的XML格式包含定义颜色的整数值,它们表示为十六进制整数(但没有前导" 0x",与HTML或misc中相同.Android。 xml文件),即红色=" ff0000",蓝色=" 00ff00",绿色=" 0000ff"等
我的XML包含以下元素:
<SomeObject name="foobar" checkedColor="123456" flaggedColor="FEDCBA" ... />
相应的Java类读取:
public class SomeObject
{
@Attribute
String name;
@Attribute #######
int checkedColor;
@Attribute #######
int flaggedColor;
// ...
}
我在上面用#######标记了我正在谈论的两个属性。颜色值应为&#34; int&#34;。
如何教SimpleXML这些值表示为十六进制字符串以及如何转换它们? 我需要编写什么变换器或转换器或者其他什么来使这些int值转换为/如同所示的十六进制字符串,以及在上面的代码中我需要注释以实现它?
答案 0 :(得分:0)
使用转换,请参阅下面的文档
答案 1 :(得分: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,它提供了一个相应的Transformer,可以正确地将这些值转换为字符串。
但我讨厌这个解决方案的是,我不仅需要注释我的java代码来实现该结果,而且实际上必须使用特殊的,特定于表示的类,即使从程序逻辑中也绝对没有必要定义一个只包含int的特殊类,只是因为我想以特殊的方式序列化这两个字段。 IMHO遵循面向方面的精神,内部表示(“int”)应该在基本的Java代码中定义,并且该代码应该与外部化时数据的表示方式无关。 另一方面,外部表示(即我是否要将int值表示为十进制或十六进制字符串)应仅在注释中定义(加上支持类,如Matcher和Transformer),但不是 in基本的Java代码。
SimpleXML框架中是否真的没有办法让这些不同方面更清晰地分开?