2017-01-12 11 views
2

Я пытаюсь получить XML ИОС в виде:Java JAXB - получить предназначенный выход

<?xml version="1.0" encoding="UTF-8"?> 
<image> 
    <lines> 
     <line id="a"> 
      <coordinates x="297" y="44"/> 
      <coordinates x="302" y="117"/>   
     </line > 
     <line id="b"> 
      <coordinates x="42" y="111"/> 
      <coordinates x="48" y="131"/> 
      <coordinates x="39" y="142"/>   
     </line > 
    </lines> 
</image> 

У меня есть два класса: LineWrapper и Line:

LineWrapper:

@XmlRootElement(name = "image") 
public class LineWrapper { 

    private List<Line> lines; 

    @XmlElementWrapper(name = "lines") 
    @XmlElement(name = "line") 
    public List<Line> getLines() { 
     return lines; 
    } 
    (...) 
} 

Линия:

public class Line{ 
    (...) 
    @XmlAttribute(name = "id") 
    public String getId() { 
     return id.get(); 
    } 

    @XmlAttribute(name="x") 
    public List<Integer> getxList() { 
     return xList; 
    } 

    @XmlAttribute(name="y") 
    public List<Integer> getyList() { 
     return yList; 
    } 
} 

Что Я получаю такую ​​аннотацию:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<image> 
    <lines> 
     <line id="a" x="297 302" y="44 117"/> 
     <line id="b" x="44 48 39" y="111 131 142"/> 
    </lines> 
</image> 

Как сделать дополнительный тег «координатой» для атрибута пары х и у?

ответ

0

Создать Coordinates класса удерживающих х и у значения:

public class Coordinates{ 
    (...) 

    private int x; 
    private int y; 


    @XmlAttribute(name="x") 
    public int getX() { 
     return x; 
    } 

    @XmlAttribute(name="y") 
    public int getY() { 
     return y; 
    } 


} 

Затем измените Line класс, чтобы использовать список этого в качестве элемента, а что владеющее х и у значения:

public class Line{ 
    (...) 

    private List<Coordinates> coordinatesList = new ArrayList<Coordinates>; 

    @XmlAttribute(name = "id") 
    public String getId() { 
     return id.get(); 
    } 

    @XmlElement(name = "coordinates") 
    public List<Coordinates> getCoordinatesList() { 
     return coordinatesList; 
    } 



} 

Конечно, вам нужно будет создать надлежащие объекты Coordinates (в этом примере отсутствуют методы сеттера) и заполняют Line объекты с ними.