Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单xml空到零_Java_Simple Framework - Fatal编程技术网

Java 简单xml空到零

Java 简单xml空到零,java,simple-framework,Java,Simple Framework,我使用简单的xml框架()序列化对象 是否有内置函数或选项,以便将null转换为nil=“true”: XML: 使用xmlns:xsi=”http://www.w3.org/2001/XML-Schema-instance“ 谢谢,不是直接的,但是你可以通过实现一个自定义。这允许双向、序列化和反序列化 只是不要忘记注释策略(如上面的链接所示) 更新 @Element(name=“example”) @转换(例如Converter.class) 私有字符串示例=”; // ... 静态类E

我使用简单的xml框架()序列化对象

是否有内置函数或选项,以便将
null
转换为
nil=“true”

XML:


使用
xmlns:xsi=”http://www.w3.org/2001/XML-Schema-instance“


谢谢,不是直接的,但是你可以通过实现一个自定义。这允许双向、序列化和反序列化

只是不要忘记
注释策略
(如上面的链接所示)


更新
@Element(name=“example”)
@转换(例如Converter.class)
私有字符串示例=”;
// ...
静态类ExampleConverter实现转换器
{
// ...
@凌驾
公共无效写入(OutputNode节点,字符串值)引发异常
{
if(value==null | | value.isEmpty()==true)
{
setAttribute(“xsi:nil”、“true”);
}
其他的
{
setAttribute(“xsi:nil”,值);
}
}
}
如果设置了空值,则将生成以下XML:

<SomeClass>
   <example xsi:nil="true"/>
</SomeClass>


否则将使用实际值。

作为对Ollo答案的说明,如果您希望使用正常的打开和关闭标记设置值,可以在else上使用node.setValue,如下所示:

public class SoapNilConverter implements Converter<String> {

@Override
public String read(InputNode node) throws Exception {
    return null;
}

@Override
public void write(OutputNode node, String value) throws Exception {
    if (value == null || value.isEmpty()) {
        node.setAttribute("xsi:nil", "true");
        node.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
    } else {
        node.setValue(value);
    }
}

}
公共类SoapNilConverter实现转换器{
@凌驾
公共字符串读取(InputNode节点)引发异常{
返回null;
}
@凌驾
公共无效写入(OutputNode节点,字符串值)引发异常{
if(value==null | | value.isEmpty()){
setAttribute(“xsi:nil”、“true”);
setAttribute(“xmlns:xsi,”http://www.w3.org/2001/XMLSchema-instance");
}否则{
node.setValue(值);
}
}
}

你确定吗?因为我已经用转换器试过了,但没用。如果我将一个元素标记为required,则在调用转换器之前会抛出ValueRequiredException。这远不是最好的(甚至可能是好的)解决方案,但您可以同时使用
@element
@Convert
注释来实现属性的自定义行为。然而,检查这一点显示了一个限制:
null
是不可能的,必须对字符串使用某种类型的“空”值(例如“``”)。但这并不是一个好的解决方案。可能在这里可以帮助你,但我还没有测试过。我在答案中添加了一些示例代码。再说一次,这个解决方案真的很麻烦。我找不到另一种方法来完成这个任务,不管是不是麻烦,它都能完成任务+1谢谢@ollo
<SomeClass>
   <example xsi:nil="true"/>
</SomeClass>
public class SoapNilConverter implements Converter<String> {

@Override
public String read(InputNode node) throws Exception {
    return null;
}

@Override
public void write(OutputNode node, String value) throws Exception {
    if (value == null || value.isEmpty()) {
        node.setAttribute("xsi:nil", "true");
        node.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
    } else {
        node.setValue(value);
    }
}

}