当前位置: 首页 > 知识库问答 >
问题:

ElementList SimpleXML中的空条目

丌官嘉勋
2023-03-14

我的问题很简单,但我什么也找不到。

我有一个列表类和一个用于XML序列化的入口类:

@Root(name = "entries")
public class List {

    @ElementList(required = false, entry = "entry", inline = true, empty = true)
    private List<Entry> entries;
}

@Root
public class Entry {

    @Element(name = "entry_id", required = true)
    private long id;

    @Element(name = "text", required = true)
    private String Text;
}

我试图解析这个XML,它在列表中没有任何条目:

<entries>
   <entry />
<entries>

返回以下错误:

W/System.err(3335): org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=entry_id, required=true, type=void) on field 'id' private long com.android.apps.model.Entry.id for class com.android.apps.model.Entry at line 2

我做错了什么?元素列表设置为空=真,必需=假。有人能帮忙吗?

共有2个答案

齐博厚
2023-03-14

为了避免分析中的错误,应该放置注释标签@set e@get

@Root(name = "entries", strict = false)
public class List {

@set:ElementList(required = false, entry = "entry", inline = true, empty = true)
@get:ElementList(required = false, entry = "entry", inline = true, empty = true)
    private List<Entry> entries;

}

@Root
public class Entry {

    @set:Element(name = "entry_id", required = true)
    @get:Element(name = "entry_id", required = true)
    private long id;

    @set:Element(name = "text", required = true)
    @get:Element(name = "text", required = true)
    private String Text;
}
葛宏爽
2023-03-14

您可以手动检查空元素:

@Root(name = "entries")
@Convert(List.ListConverter.class) // Set the converter
public class List
{
    @ElementList(required = false, entry = "entry", inline = true, empty = true)
    private java.util.List<Entry> entries;


    public void add(Entry e)
    {
        // Just for testing
        entries.add(e);
    }



    static class ListConverter implements Converter<List>
    {
        @Override
        public List read(InputNode node) throws Exception
        {
            List l = new List();
            InputNode child = node.getNext("entry");

            while( child != null)
            {
                if( child.isEmpty() == true ) // child is an empty tag
                {
                    // Do something if entry is empty
                }
                else // child is not empty
                {
                    Entry e = new Persister().read(Entry.class, child); // Let the Serializer read the Object
                    l.add(e);
                }

                child = node.getNext("entry");
            }

            return l;
        }


        @Override
        public void write(OutputNode node, List value) throws Exception
        {
            // Not required for reading ...
            throw new UnsupportedOperationException("Not supported yet.");
        }
    }
}

如何使用:

Serializer ser = new Persister(new AnnotationStrategy()); // Set AnnotationStrategy here!
List l = ser.read(List.class, yourSourceHere);

文档:

  • 转换器
  • 注释策略
 类似资料:
  • 如果值之一为则抛出。我不理解这种行为,映射可以包含空指针作为值没有任何问题。的值不能为null有什么好的原因吗? 还有,是否有一个很好的Java 8方法来修复这个问题,或者我应该恢复到普通的老for循环? 我的问题的一个例子: 堆栈跟踪: Java 11号还存在这个问题。

  • 我正在尝试创建一个列表,列出在FTP服务器上的文件夹中找到的所有文件名。完整目录与登录凭据一起保存在设置数据库表中。它连接到FTP区域很好,我可以上传/下载文件。 这是我从文件夹中获取文件的代码。 我遇到的问题是,当前我试图搜索的文件夹是空的,但它找到了2个文件。 为什么会这样? 中的值是 这是我在FileZilla中打开它时的文件夹-它肯定是一个空文件夹。 如何查看系统文件中的所有文件并将其放入

  • 我正在使用javafx构建一个GUI,包括一个带有菜单栏的GridPane和另一个GridPane。我希望第二个GridPane是可滚动的,所以我将它放入一个scroll pane“new scroll pane(grid 2)”,并将其添加到第一个GridPane中。不幸的是,ScrollPane的内容不再水平拉伸,如果窗口大小改变,什么是需要的。 这是一张图片,应该可以澄清问题:http://

  • 我一直在努力在MySQL中输入空白值。例如,代码: 不会工作。我总是收到以下错误: 但是,当我运行以下两个语句之一时: 或 这个查询工作得很好。column2的默认值已设置为“0”,仍然没有运气。 我面临的问题是所有表中的所有列。我的申请将有空白条目(无法更改)。这个功能以前工作得很好,当我将应用程序代码转移到另一个服务器时,我开始出现这个错误。 MySQL服务器版本:8.0.22-MySQL社区

  • 我使用,并希望显示玩家得分的条形图,得分在y轴上,玩家的游戏在x轴上分组。 例如 由于玩家不必玩相同数量的游戏,因此在创建数据集时会产生大量空白,因为它试图为玩家2绘制一个条 有谁能帮我把这个空白处补上吗?理论上,玩家1可以继续玩100场游戏,而玩家2和3只玩几场,所以这看起来很荒谬!我是JFreeChart的新手,所以可能有一个明显的解决方案! 提前感谢您的帮助。

  • 我使用的是Chart.js2.5.0版本,需要知道是否有任何方法可以隐藏分组堆叠条形图中每组的空条?图表数据集中的某些数据值可以为空。 这里是我想要的:组合图表类型(分组和堆叠) 小提琴:https://jsfidle.net/q_sabawoon/atlxlg7x/ 请帮帮忙。