2009-10-30 36 views
10

Tôi đang cố gắng tìm ra cách đơn giản nhất để ánh xạ một tệp xml tới một đối tượng java cũ đơn giản.Đơn giản Java Xml để lập bản đồ/ràng buộc POJO?

Lưu ý: Trong ví dụ của tôi, xml không hoàn toàn phù hợp với POJO dự định của tôi.

///////// THE XML 
<?xml version="1.0" encoding="UTF-8"?> 
<Animal> 
    <standardName> 
    <Name>Cat</Name> 
    </standardName> 
    <standardVersion> 
    <VersionIdentifier>V02.00</VersionIdentifier> 
    </standardVersion> 
</Animal> 


////// THE INTENDED POJO 
class Animal 
{ 
private String name; 
private String versionIdentifier; 
} 

Chú thích JAXM (có chú thích) sẽ không hoạt động vì chú thích tên phần tử JAXM không cho phép tôi chỉ định các phần tử lồng nhau. (ví dụ: tên/Tên chuẩn).

Tôi đã xem Jibx nhưng có vẻ quá phức tạp và không có ví dụ đầy đủ nào được cung cấp cho những gì tôi muốn làm.

Castro có vẻ như nó có thể làm những gì tôi muốn (sử dụng các tệp ánh xạ), nhưng tôi tự hỏi liệu có bất kỳ giải pháp khả thi nào khác không. (Có thể điều đó sẽ cho phép tôi bỏ qua các tệp ánh xạ và chỉ cho phép tôi chỉ định mọi thứ trong chú thích).

Cảm ơn

+0

Là một lưu ý bổ sung, lập bản đồ/ràng buộc sẽ phải làm việc cả hai cách. – vicsz

Trả lời

3

bài viết này có thể giúp bạn ... nó chỉ đòi hỏi bạn phải biết xpath http://onjava.com/onjava/2007/09/07/schema-less-java-xml-data-binding-with-vtd-xml.html

+2

Có vẻ như điều này có lẽ chúng ta sẽ là lựa chọn tốt nhất, (không có tệp ánh xạ hoặc chú thích), nhưng chỉ có một số dạng phương thức dịch bằng xpath, và có thể là vtdxml hoặc dom. – vicsz

+1

hãy cẩn thận với trình phân tích, nó không phải là trình phân tích cú pháp đầy đủ và có thể rất chậm đối với các tài liệu XmL lớn –

2

tôi xem xét JiBX tốt nhất của bó (JAXB, Castor, XMLBeans, vv), đặc biệt là bởi vì tôi ủng hộ việc lập bản đồ các tập tin qua các chú thích. Phải thừa nhận rằng nó có một đường cong học tập khá, nhưng trang web có rất nhiều ví dụ tốt. Bạn phải đã bỏ lỡ số tutorial.

Nếu bạn chỉ đi một chiều (XML -> POJO), bạn có thể sử dụng Digester.

Side bình luận: Tôi thích tập tin bản đồ trên chú thích vì chú thích:

  • lộn xộn mã (đặc biệt là khi sử dụng các chú thích từ một số sản phẩm)
  • lo ngại hỗn hợp (XML, cơ sở dữ liệu, vv trong lớp tên miền)
  • chỉ có thể liên kết với một XML duy nhất (hoặc cơ sở dữ liệu, hoặc dịch vụ web, vv) đại diện
+0

Tôi đọc hướng dẫn, nhưng trừ khi tôi bỏ lỡ một cái gì đó .. có vẻ là một vài bước bổ sung cần thiết (so với Castro), tức là các yêu cầu để chạy bindgen. (Mà không thực sự được giải thích quá dễ dàng trên trang web). Nó có vẻ như một overcomplication phải chạy bindgen trên các tập tin bản đồ của bạn trước khi bạn có thể sử dụng chúng. Có các hướng dẫn/đoạn trích đơn giản có sẵn không? tức là đã cho tệp xml này, tệp ánh xạ xml này và đoạn mã này, bạn sẽ nhận được bản sao POJO này. – vicsz

+0

EclipseLink JAXB (MOXy) cũng cung cấp một tệp ánh xạ. Điều này cho phép bạn tự do sử dụng các chú thích (các chú thích chuẩn JAXB cộng với các phần mở rộng) hoặc một tệp ánh xạ. –

3

Jakarta Commons Digester nên làm những gì bạn muốn.

Hoặc, tôi khuyên bạn nên viết một lớp chuyển đổi sử dụng XPath để truy xuất các phần tử từ XML.

4

EclipseLink JAXB (MOXy) cho phép bạn làm con đường dựa lập bản đồ mà bạn đang tìm kiếm:

@XmlRootElement 
class Animal 
{ 
@XmlPath("standardName/Name/text()") 
private String name; 

@XmlPath("standardVersion/VersionIdentifier/text()"); 
private String versionIdentifier; 
} 

Muốn biết thêm thông tin xem:

EclipseLink cũng cho phép các siêu dữ liệu được quy định sử dụng một tập tin cấu hình bên ngoài:

+0

'Liên kết EclipseLink JAXB (MOXy)' chuyển hướng đến * 404 * –

+0

Liên kết hiện tại là http://www.eclipse.org/ eclipselink/# moxy –

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