Java 简单xml空到零
我使用简单的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
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);
}
}
}