2013-04-08 38 views
14

Tôi khá chắc chắn, đây là một trong nhiều câu hỏi được nhân đôi xung quanh chuyển đổi XML sang đối tượng Java. Nhưng tôi đã bắt đầu chủ đề này vì tôi không thể tìm thấy đơn giản hơn hoặc tìm kiếm giải pháp đơn giản hơn.Ánh xạ các thực thể XML vào các đối tượng Java

Tôi có một xsd [Infact Tôi đang thiết kế nó] và xml. Tôi muốn tự động lập bản đồ dữ liệu xml để đậu Java theo bản đồ

<tns:SummaryCart xmlns:tns="SummaryCart" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="SummaryCart.xsd"> 
    <SummaryElement type="test"> 
     <order>1</order> 
     <id>A</id> 
     <displayName>A</displayName> 
     <subElements> 
      <order>1</order> 
      <id>Preactivation</id> 
      <displayName>Preactivation</displayName> 
     </subElements> 
     <maxlines>1</maxlines> 
    </SummaryElement> 
</tns:SummaryCart> 

Bây giờ lớp Java của tôi sẽ

public class SummaryCart{ 
    private List<SummaryElement> summaryElementList; 
} 
public class SummaryElement { 
    private int order; 
    private String id; 
    private String displayName; 
    private String property; 
    private List<SummaryElement> subElements; 
    private int maxlines; 
    private String type; 
} 

Có bất kỳ công cụ đơn giản/khuôn khổ có thể tự động lập bản đồ dữ liệu từ XML sang Java bean [PHẢI hỗ trợ các thuộc tính/ánh xạ phần tử]. Hướng dẫn sẽ tốt.

Btw, tôi đang sử dụng khung công tác Spring, nếu tận dụng lợi thế của mùa xuân-oxm, được chào đón.

+5

Sử dụng JAXB với các chú thích. [Đây] (http://jaxb.java.net/tutorial/) là một hướng dẫn. –

Trả lời

28

Dưới đây là cách bạn có thể ánh xạ đối tượng của mình tới XML bằng cách sử dụng JAXB (JSR-222). An thực hiện được bao gồm trong JDK/JRE bắt đầu với Java SE 6. JAXB được hỗ trợ bởi Spring (xem phần 8.5: http://static.springsource.org/spring-ws/site/reference/html/oxm.html)

SummaryCart

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

@XmlRootElement(name="SummaryCart", namespace="SummaryCart") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class SummaryCart{ 

    @XmlElement(name="SummaryElement") 
    private List<SummaryElement> summaryElementList; 

} 

SummaryElement

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

@XmlAccessorType(XmlAccessType.FIELD) 
public class SummaryElement { 

    private int order; 
    private String id; 
    private String displayName; 
    private String property; 
    private List<SummaryElement> subElements; 
    private int maxlines; 

    @XmlAttribute 
    private String type; 

} 

Demo

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

public class Demo { 

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

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum15881876/input.xml"); 
     SummaryCart sc = (SummaryCart) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "SummaryCart.xsd"); 
     marshaller.marshal(sc, System.out); 
    } 

} 

input.xml/Output

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ns2:SummaryCart xmlns:ns2="SummaryCart" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="SummaryCart.xsd"> 
    <SummaryElement type="test"> 
     <order>1</order> 
     <id>A</id> 
     <displayName>A</displayName> 
     <subElements> 
      <order>1</order> 
      <id>Preactivation</id> 
      <displayName>Preactivation</displayName> 
      <maxlines>0</maxlines> 
     </subElements> 
     <maxlines>1</maxlines> 
    </SummaryElement> 
</ns2:SummaryCart> 
+0

Không phải để nói, chúng tôi đang sử dụng JDK 5. Có, ứng dụng kế thừa. Tôi có thể làm điều đó với Java 5 bằng cách bao gồm bất kỳ thư viện cụ thể nào sử dụng Maven không. – Reddy

+0

Đây là một tập tin pom.xml kéo trong EclipseLink MOXy như là JAXB impl (tôi là chì MOXy): https://github.com/bdoughan/blog20110819/blob/master/pom.xml –

1

Về cơ bản bạn muốn unmarshal XML của bạn. Dưới đây là hướng dẫn chi tiết mô tả cách sử dụng lệnh JAXB xjc tới generate a Java class from XML Schema. Một maven xjc plugin cũng có sẵn để thuận tiện cho bạn.

+1

Bạn cũng có thể sử dụng triển khai JAXB khi bắt đầu từ các lớp Java: http://stackoverflow.com/a/15884122/383861 –

+1

Lưu ý Blaise. Sự hiểu biết ban đầu của tôi về câu hỏi của OP là anh ta muốn tạo ra các tệp Java không có gì, chỉ sử dụng XSD làm điểm khởi đầu của mình. Đọc lại nó một lần nữa, có vẻ như anh ta chỉ cần một cách để tự động ánh xạ chúng. Cảm ơn bạn đã không bỏ phiếu. :) – Jops

Các vấn đề liên quan