2013-08-19 2 views
4

EDIT: Удалены предыдущая редактироватьдесериализации с SimpleXML

Я пытаюсь десериализации следующее:

<?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> 

Использование

@Root 
public class Matches { 

    @ElementList 
    private List<Match> list; 

    public List getMatches() { 
     return list; 
    } 
} 

И

@Root(name = "KAMP", strict = false) 
public class Match{ 

    @Element(name = "ID", required = false) 
    public String Id; 

    @Element(name = "SQLTID", required = false) 
    public String Sqltid; 

    @Element(name = "DATO", required = false) 
    public String MatchDate; 
} 

я получаю

Element 'KAMP' does not have a match in class <myClass> 

Я попытался добавить (name = "KAMP") к @ElementList, но это не помогло.

Может ли кто-нибудь еще помочь?

+0

Вы хотите, чтобы отобразить '' Match' к KAMP'? Вы должны указать «направления»;) – alfasin

+0

Да @alfasin. Это то, что я хочу. Получить коллекцию/список объектов соответствия из XML, содержащего элементы KAMP. – CJe

+0

Still nuthin :-(Я могу десериализовать только один элемент KAMP в файле, но не более одного, обернутого в элемент ... должен быть таким близким ... :-) – CJe

ответ

7

Следующий код работает для меня, обратить особое внимание на следующие два пункта:

  1. пустой конструктор в ALL.java
  2. , что список аннотацию 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("----------"); 
     } 
    } 
} 

KAMP.java

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 
---------- 
+0

«Должен определить», как в HAVE? :-) Или я могу обойти это с помощью атрибутов? – CJe

+0

@CJe вы можете изменить имя класса, если вы не хотите использовать аннотации для сопоставления. – alfasin

+0

Итак, я попробовал переименовать мой класс «Матчи» в ALL и добавить имя = «KAMP» в мой класс совпадений - все равно ничего хорошего: не удалось удовлетворить @ org.simpleframework.xml.ElementList (data = false, empty = true, entry = KAMP, inline = false, name =, required = true, type = void) в поле «list» private java.util.List – CJe

Смежные вопросы