gpt4 book ai didi

android - 属性 "empty"未按预期使用 SimpleFramework

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:12 24 4
gpt4 key购买 nike

所以我试图在元素没有值时设置一个空属性。

所以我的类看起来像这样:

@Order(attributes = { "name" })
public class TypeNumber {
@Attribute(required = false)
protected String name;

@Element(required = false)
@Attribute(empty = "xsi:nil=\"true\"")
protected BigDecimal value;

//getter setter methods goes here
}

如果我期望输出为空值:

<field name="some_name">
<value xsi:nil="true"/>
</field>

而实际输出是:

<field name="some_name"/>

知道为什么空属性没有按预期工作吗?还是我做错了?

注意:我将 SimpleFramework XML 与 VisitorStrategy 结合使用。所以,不能使用AnnotationStrategy。我也有自定义访问者来读取和写入节点。

最佳答案

您将需要一个自定义转换器...

现在你的输出是:
<typeNumber name="original" value="10"/>

<typeNumber name="original_empty" value="xsi:nil=&quot;true&quot;"/>

让我们开始吧!

您要做的第一件事是将 AnnotationStrategy 传递给 Persister 的构造函数:

Serializer serializer = new Persister(new AnnotationStrategy());

.. 然后在您的模型中创建一个自定义转换器:

@Root(name = "TypeNumberFixed")
@Order(attributes = {"name"})
@Convert(TypeNumberFixed.FixConverter.class)
class TypeNumberFixed {
@Attribute(required = false)
protected String name;

@Element(required = false, name = "value")
protected BigDecimal value;


public static class FixConverter implements Converter<TypeNumberFixed> {

@Override
public TypeNumberFixed read(InputNode inputNode) throws Exception {
//Implement your own deConverter
return null;
}

@Override
public void write(OutputNode node, TypeNumberFixed value) throws Exception {
node.setAttribute("name",value.name);
OutputNode valueNode = node.getChild("value");
if (value.value != null) {
valueNode.setValue(value.value.toPlainString());
} else {
valueNode.setAttribute("xsi:nil", "true");
}
}
}
}

这将分别为空/非空生成以下输出:

typeNumberFixed.value = null:

<TypeNumberFixed name="new_empty">
<value xsi:nil="true"/>
</TypeNumberFixed>

typeNumberFixed.value = 30:

<TypeNumberFixed name="new">
<value>30</value>
</TypeNumberFixed>

Here's如果您有兴趣,请访问 repo。

关于android - 属性 "empty"未按预期使用 SimpleFramework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41426251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com