简单的库很棒,我已经解析了很多 自从过去3天以来,不同于SOAP服务器的XML,但我遇到了 布尔属性为“0”或“1”:
<list mybool1="0" mybool2="1" attr1="attr" attr2="attr">
<page mybool3="1">
...
</page>
<page mybool3="0">
...
</page>
...
</list>
我试图创建这个类:
public class Boolean01Converter implements Converter<Boolean>
{
@Override
public Boolean read(InputNode node) throws Exception {
return new Boolean(node.getValue().equals("1"));
}
@Override
public void write(OutputNode node, Boolean value) throws Exception {
node.setValue(value.booleanValue()?"1":"0");
}
}
并在我的对象定义上实现它:
@Root(name="list")
public class ListFcts
{
@Attribute
@Convert(Boolean01Converter.class)
private Boolean mybool1;
@Attribute
@Convert(Boolean01Converter.class)
private Boolean mybool2;
@Attribute
private int ...
@ElementList(name="page", inline=true)
private List<Page> pages;
public Boolean getMybool1() {
return mybool1;
}
}
但是我仍然对每个布尔值都是假的。
[edit]
事实上,当我这样做时:
@Override
public Boolean read(InputNode node) throws Exception {
return true;
}
我仍然得到false
:
Serializer serial = new Persister();
ListFcts listFct = serial.read(ListFcts.class, soapResult);
if(listFct.getMybool1())
{
//this never happens
}else{
//this is always the case
}
所以我的转换器没有影响...
另外:如何将转换器连接到Persister而不是 在@Attributes上宣布它一百次?
非常感谢提前!!
[edit2]
我放弃了转换器,这是我自己的解决方案:
@Root(name="list")
public class ListFcts
{
@Attribute
private int mybool1;
@Attribute
private int mybool2;
public int getMybool1() {
return mybool1;
}
public Boolean isMybool1() {
return (mybool1==1)?true:false;
}
...
}
答案 0 :(得分:2)
您的代码正在使用node.getValue()
,它返回每个XML节点的值(读取:内容)(示例中的“...”位)。
您需要的是阅读属性值,例如node.getAttributeValue("mybool1").equals("1")
答案 1 :(得分:0)
我放弃了转换器,我听说过Transform但是没有找到如何使用它所以这是我自己的基本解决方案:
@Root(name="list")
public class ListFcts
{
@Attribute
private int mybool1;
@Attribute
private int mybool2;
public int getMybool1() {
return mybool1;
}
public Boolean isMybool1() {
return (mybool1==1)?true:false;
}
...
}