Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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 使用SimpleXML反序列化_Java_Xml_Xml Deserialization_Simple Framework - Fatal编程技术网

Java 使用SimpleXML反序列化

Java 使用SimpleXML反序列化,java,xml,xml-deserialization,simple-framework,Java,Xml,Xml Deserialization,Simple Framework,编辑:删除了以前的编辑 我正在尝试反序列化以下内容: <?xml version="1.0" encoding="UTF-8"?> <ALL> <KAMP> <ID>1</ID> <SQLTID>1376881200</SQLTID> <DATO>2013-08-19</DATO> </KAMP> ...

编辑:删除了以前的编辑

我正在尝试反序列化以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<ALL>
    <KAMP>
        <ID>1</ID>
        <SQLTID>1376881200</SQLTID>
        <DATO>2013-08-19</DATO>
    </KAMP>
    ...
    <KAMP>
        <ID>2</ID>
        <SQLTID>1376881200</SQLTID>
        <DATO>2013-08-19</DATO>
    </KAMP>
</ALL>
我一直在

Element 'KAMP' does not have a match in class <myClass>
元素“KAMP”在类中没有匹配项
我尝试将
(name=“KAMP”)
添加到
@ElementList
中,但没有任何帮助


其他人能帮忙吗?

以下代码对我很有用,请特别注意以下两项:

  • ALL.java中的空构造函数
  • 列表的注释为
    inline=true
  • ALL.java:

    import org.simpleframework.xml.ElementList;
    import org.simpleframework.xml.Root;
    import org.simpleframework.xml.Serializer;
    import org.simpleframework.xml.core.Persister;
    import java.io.File;
    import java.util.List;
    
    /**
     * User: alfasin
     * Date: 8/19/13
     */
    @Root(name="ALL")
    public class ALL {
    
        @ElementList(entry="KAMP", inline=true)
        private List<KAMP> kamp;
    
        public ALL(){};
    
        public List<KAMP>  getMatches() {
            return kamp;
        }
    
        public static void main(String...args) throws Exception {
            Serializer serializer = new Persister();
            File example = new File("/Users/alfasin/Documents/workspace-sts-3.2.0.RELEASE/SimpleXML/src/kamp.xml");
            ALL all = serializer.read(ALL.class, example);
            for(KAMP tmp : all.getMatches()){
                System.out.println("ID: "+tmp.Id);
                System.out.println("MatchDate: "+tmp.MatchDate);
                System.out.println("Sqltid: "+tmp.Sqltid);
                System.out.println("----------");
            }
        }
    }
    
    输出

    ID: 1
    MatchDate: 2013-08-19
    Sqltid: 1376881200
    ----------
    ID: 2
    MatchDate: 2013-08-19
    Sqltid: 1376881200
    ----------
    

    您是否希望它将
    匹配
    映射到
    KAMP
    ?你应该提供“方向”;)是的,阿尔法辛。这就是我想要的。要从包含KAMP元素的XML中获取匹配对象的集合/列表,请执行以下操作:-(我可以在文件中单独反序列化单个KAMP元素,但在一个元素中不能有多个KAMP元素…必须如此接近…:-)“应定义”为“必须”?:-)或者我可以使用属性解决问题吗?@CJe如果不想使用注释进行映射,您可以更改类的名称。因此,我尝试将我的Matches类重命名为ALL,并将name=“KAMP”添加到我的Match类中-仍然不好:无法满足@org.simpleframework.xml.ElementList(data=false,empty=true,entry=KAMP,inline=false,name=,required=true,type=void)在字段“list”private java.util上。List@CJe这对您没有帮助,因为ID、SQLTID和DATO应该“在”KAMP下-这意味着一个名为KAMP的对象应该包含这些属性。在您当前的类中,它们“作为对等对象”(并行)存在@CJe我不知道为什么,我只能猜测它与SimpleXML实现有关
    import org.simpleframework.xml.ElementList;
    import org.simpleframework.xml.Root;
    import org.simpleframework.xml.Serializer;
    import org.simpleframework.xml.core.Persister;
    import java.io.File;
    import java.util.List;
    
    /**
     * User: alfasin
     * Date: 8/19/13
     */
    @Root(name="ALL")
    public class ALL {
    
        @ElementList(entry="KAMP", inline=true)
        private List<KAMP> kamp;
    
        public ALL(){};
    
        public List<KAMP>  getMatches() {
            return kamp;
        }
    
        public static void main(String...args) throws Exception {
            Serializer serializer = new Persister();
            File example = new File("/Users/alfasin/Documents/workspace-sts-3.2.0.RELEASE/SimpleXML/src/kamp.xml");
            ALL all = serializer.read(ALL.class, example);
            for(KAMP tmp : all.getMatches()){
                System.out.println("ID: "+tmp.Id);
                System.out.println("MatchDate: "+tmp.MatchDate);
                System.out.println("Sqltid: "+tmp.Sqltid);
                System.out.println("----------");
            }
        }
    }
    
    import org.simpleframework.xml.Element;
    import org.simpleframework.xml.Root;
    
    /**
     * User: alfasin
     * Date: 8/19/13
     */
    @Root(name="KAMP",strict = false)
    public class KAMP {
    
        @Element(name = "ID", required = false)
        public String Id;
    
        @Element(name = "SQLTID", required = false)
        public String Sqltid;
    
        @Element(name = "DATO", required = false)
        public String MatchDate;
    
    }
    
    ID: 1
    MatchDate: 2013-08-19
    Sqltid: 1376881200
    ----------
    ID: 2
    MatchDate: 2013-08-19
    Sqltid: 1376881200
    ----------