2013-07-21 2 views
1

У меня есть файлы XML, которые содержат такие элементы, как так:Как получить как атрибуты и список данных с XMLList

<element attribute1="a" attribute2="b" attribute3="c"> 
    a b c d e f g 
</element> 

Есть ли способ, чтобы получить как атрибуты, а также получить значение в виде списка?

Я мог бы использовать @XmlList, чтобы получить только список [a, b, c, d, e, f, g], но тогда у меня не было бы атрибутов. Я мог бы создать класс для элемента и использовать @XmlAttribute и @XmlValue, но тогда значение не будет таким, как список.

Если нет способа сделать это, я создам класс для элемента, в котором метод getter возвращает значение String в виде массива или списка, и это будет достаточно просто, но мне просто интересно, является правильным способом, чтобы XML был немаршрутизирован должным образом в первую очередь.

ответ

1

@XmlValue может применяться к объекту List. При этом сопоставлении элементы списка будут представлены как список, разделенный пробелом в XML. Вы можете сделать следующее:

элемент

import java.util.List; 
import javax.xml.bind.annotation.*; 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Element { 

    @XmlAttribute 
    private String attribute1; 

    @XmlAttribute 
    private String attribute2; 

    @XmlAttribute 
    private String attribute3; 

    @XmlValue 
    private List<String> value; 

} 

Demo

import java.io.File; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Element.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum17775900/input.xml"); 
     Element element = (Element) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(element, System.out); 
    } 

} 

Input.xml/выход

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<element attribute1="a" attribute2="b" attribute3="c">a b c d e f g</element> 
+1

Ничего себе, вы можете сделать @XmlValuend определите его как просто String, и он получит все значение или просто определит его как список, и он просто знает, что вы хотите, и разделите его! Это слишком легко! Люди, которые делали это, отлично поработали. – Loduwijk