2015-09-14 1 views
3

Что такое «правильный» способ обработки взаимно однозначное отображение XML (XMLA) в JAXB сгенерированные Pojo о том, что карты в контракте отличается XML (xmlB)Лучший способ отображения из XML в удаление информации POJO

Например, с следующий вход:

<?xml version="1.0"?> 
<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
    </book> 
</catalog> 

Я хочу, чтобы отобразить следующий класс

public class PART 
{ 
    private String ITEM; 

    private String MANUFACTURER; 


    @Override 
    public String toString() 
    { 
     return "ClassPojo [ITEM = "+ITEM+", MANUFACTURER = "+MANUFACTURER+"]"; 
    } 
} 

где автор сопоставляется ITEM и название карты производителю.

В настоящее время я использую преобразования xml, а затем отображение впоследствии; это лучший/правильный способ сделать это? Или что такое отраслевой стандарт для такой проблемы.

Благодарим вас

+0

Взгляните: http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter .html –

+0

Вы говорите о «jaxb generated pojo's», но вы их не показываете. Они похожи на классы «Каталог» и «Книга», поэтому вы накладываете «Книгу» на «ЧАСТЬ», после того, как JAXB отменил «Книгу» для вас. Не знаю, зачем вам нужно * и * преобразование xml transform * и *. – Andreas

ответ

0

Примечание: имена классов должны быть смешаны, случай (Part), и имена полей должны быть в нижнем регистре, а точнее верблюжьего (item и manufacturer).


Вы можете указать имя элемента в аннотации @XmlElement.

public class Test { 
    public static void main(String[] args) throws Exception { 
     String xml = "<?xml version=\"1.0\"?>\n" + 
        "<catalog>\n" + 
        " <book id=\"bk101\">\n" + 
        "  <author>Gambardella, Matthew</author>\n" + 
        "  <title>XML Developer's Guide</title>\n" + 
        " </book>\n" + 
        "</catalog>"; 
     JAXBContext jc = JAXBContext.newInstance(Catalog.class, PART.class); 
     Unmarshaller u = jc.createUnmarshaller(); 
     Catalog catalog = (Catalog)u.unmarshal(new StringReader(xml)); 
     for (PART part : catalog.parts) 
      System.out.println(part.toString()); 
    } 
} 

@XmlRootElement(name="catalog") 
class Catalog { 
    @XmlElement(name="book") 
    List<PART> parts; 
} 

class PART 
{ 
    @XmlElement(name="author") 
    private String ITEM; 

    @XmlElement(name="title") 
    private String MANUFACTURER; 

    @Override 
    public String toString() 
    { 
     return "ClassPojo [ITEM = "+ITEM+", MANUFACTURER = "+MANUFACTURER+"]"; 
    } 
} 

Выход

ClassPojo [ITEM = Gambardella, Matthew, MANUFACTURER = XML Developer's Guide] 
+0

Я не могу изменить файлы классов для PART, у которых уже есть разные имена элементов –