Bạn đề xuất thư viện Java XML nào (để thay thế dom4j)? [đóng cửa]


76

Tôi đang tìm kiếm thứ gì đó giống như dom4j, nhưng không có mụn cóc của dom4j, chẳng hạn như tài liệu bị lỗi hoặc bị thiếu và trạng thái phát triển dường như bị đình trệ.

Thông tin cơ bản: Tôi đang sử dụng ủng hộ dom4j, nhưng không cảm thấy hoàn toàn đúng về nó vì tôi biết thư viện còn lâu mới tối ưu (ví dụ: xem cách các phương thức trong lớp Biểu định kiểu liên quan đến XSLT được ghi lại; bạn sẽ chuyển gì để chạy ( ) như String modetham số?)

Yêu cầu: Thư viện phải làm cho việc xử lý XML cơ bản dễ dàng hơn so với khi sử dụng JDK ( javax.xmlorg.w3c.domcác gói) thuần túy . Những thứ như thế này:

  • Đọc tài liệu XML (từ tệp hoặc Chuỗi) vào một đối tượng, dễ dàng xem qua và thao tác với DOM, thực hiện các truy vấn XPath và chạy XSLT dựa trên nó.
  • Xây dựng một tài liệu XML trong mã Java của bạn, thêm các phần tử và thuộc tính và dữ liệu, và cuối cùng là ghi tài liệu vào một tệp hoặc Chuỗi.

Tôi thực sự thích những gì dom4j hứa hẹn , thực sự: " dễ sử dụng, thư viện mã nguồn mở để làm việc với XML, XPath và XSLT [...] với hỗ trợ đầy đủ cho DOM, SAX và JAXP. " Và dom4j 2.0 sắp tới tuyên bố sẽ khắc phục mọi thứ : sử dụng đầy đủ Java 5 và bổ sung tài liệu còn thiếu. Nhưng thật không may, nếu bạn nhìn kỹ hơn :

Cảnh báo: dom4j 2.0 đang ở giai đoạn tiền alpha. Có khả năng là nó không thể được biên dịch. Trong trường hợp nó có thể được biên dịch ngẫu nhiên, nó có khả năng không thể chạy. Trong trường hợp nó chạy thỉnh thoảng nó có thể phát nổ đột ngột. Nếu bạn muốn sử dụng dom4j, bạn muốn có phiên bản 1.6.1. Có thật không.

... và trang web đã nói điều đó từ lâu . Vì vậy, có một thay thế tốt cho dom4j? Vui lòng cung cấp một số lý do cho thư viện ưa thích của bạn, thay vì chỉ kết xuất tên và liên kết. :-)


6
Có vẻ như họ đã mất miền dom4j.org (có lẽ một dấu hiệu khác cho thấy người ta thực sự nên thay thế nó bằng một thứ gì đó ...) - trang web vẫn có sẵn tại dom4j.sourceforge.net .
Jonik

2
Kiểm tra một số bài đăng khác về chủ đề: stackoverflow.com/questions/373833/best-xml-parser-for-javastackoverflow.com/questions/25614/… . Cũng có ghi chú thú vị về jdom / dom4j / xom ở đây: list.xml.org/archives/xml-dev/200410/msg00492.html
dma_k

Ồ, chỉ cần nhận thấy rằng cuối cùng đã có bản phát hành dom4j 2.0 alpha: sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2 ( Mặc dù họ vẫn chưa khôi phục miền dom4j.org của mình .) Có ai đã thử nó không ngoài?
Jonik

@ vtd-xml. Không, tôi chưa nghe nói về nó ... Hãy xem xét đăng câu trả lời đầy đủ về nó nếu bạn nghĩ rằng đó là một sự thay thế dom4j tốt như đã trình bày trong câu hỏi
Jonik

Một tùy chọn khác là bạn luôn có thể giúp nhóm dom4j tạo dom4j tốt hơn. Lấy một ngã ba và đi sâu vào và gửi một số bản vá.
Adam Gent

Câu trả lời:


53

Chắc chắn rồi, XOM :-)

XOM được thiết kế để dễ học và dễ sử dụng. Nó hoạt động rất thẳng thắn và có một đường cong học tập rất nông cạn. Giả sử bạn đã quen với XML, bạn sẽ có thể bắt đầu và chạy với XOM rất nhanh chóng.

Tôi sử dụng XOM trong vài năm nay, và tôi vẫn rất thích nó. Dễ sử dụng, nhiều tài liệu và bài viết trên web, API không thay đổi giữa các bản phát hành. 1.2 đã được phát hành gần đây.

XOM là API XML duy nhất không thỏa hiệp về tính đúng đắn. XOM chỉ chấp nhận các tài liệu XML được định dạng tốt trong không gian tên và chỉ cho phép bạn tạo các tài liệu XML có không gian tên. (Trên thực tế, nó nghiêm ngặt hơn một chút: nó thực sự đảm bảo rằng tất cả các tài liệu đều có thể xoay vòng và có các tập tin XML được xác định rõ.) XOM quản lý XML của bạn nên bạn không cần phải làm như vậy. Với XOM, bạn có thể tập trung vào giá trị duy nhất của ứng dụng của mình và tin tưởng XOM sẽ sử dụng đúng XML.

Xem trang web http://www.xom.nu/ để biết Câu hỏi thường gặp, Sách dạy nấu ăn, cơ sở thiết kế, v.v. Giá như mọi thứ đều được thiết kế với tình yêu thương như vậy :-)

Tác giả cũng đã viết về Điều gì sai với API XML (và cách khắc phục chúng) . (Về cơ bản, lý do tại sao XOM tồn tại ngay từ đầu)

Đây cũng là cuộc phỏng vấn 5 phần của Artima với tác giả về XOM, nơi họ nói về những điều sai trái với API XML , Điều tốt, Điều xấu và DOM , Đánh giá thiết kế của JDOM , Bài học rút ra từ JDOM và cuối cùng là Nguyên tắc thiết kế và XOM .


XOM trông có vẻ đầy hứa hẹn, đặc biệt là xem xét cách người tạo ra nó biết rất rõ các thư viện hiện có và cố gắng cải thiện chúng. So với dom4j và JDOM, nó cũng có vẻ tích cực hơn: bản phát hành gần đây nhất là vào tháng 3 năm 2009 (mặc dù trước đó là vào tháng 8 năm 2006). Tôi đang dùng thử XOM một trong những ngày này để xem liệu tôi có thể thực sự sử dụng nó một cách dễ dàng hoặc tương tự như dom4j hay không.
Jonik

Được rồi, tôi đang thử nghiệm XOM (sử dụng Stack Overflow để cung cấp các vấn đề nhỏ cần giải quyết: stackoverflow.com/questions/883987/… , stackoverflow.com/questions/428073/… , stackoverflow.com/questions/139076/ … Vv :-), và tôi bắt đầu tin rằng tôi có thể làm được khá nhiều thứ với XOM mà tôi có thể làm với dom4j!
Jonik

(tt) Tuy nhiên, một điều tôi đang nghi ngờ là truyền dữ liệu XML, điều mà tôi đã làm với dom4j trước đây. Đây là một câu hỏi tôi đã viết về nó, có lẽ bạn biết câu trả lời? stackoverflow.com/questions/967288/…
Jonik

11
Hãy coi chừng. Chuyển đổi dom4j / jdom thành XOM là một nỗi đau trong mông. Hơn nữa, API không hỗ trợ các bộ sưu tập Java. Cả hai đều là những điểm rất nhức nhối.
Gili

4
Chỉ để thêm ý kiến ​​của tôi sau khi làm việc với XOM một chút. Chắc chắn là tốt hơn rồi JDOM. Nhưng nó thiếu một số tính năng đường nhất định mà tôi muốn thấy trong XML API ( Element.setAttribute(name, value),, Element.setText(string)mẫu khách truy cập (xem danh sách.ibiblio.org/pipermail/xom-interest/2010-March/004076.html ), hỗ trợ tốt hơn cho API StAX / TrAX ), mà dom4j có.
dma_k

18

Một trong những được tích hợp trong JDK ... với một số bổ sung.

Vâng, thật khó sử dụng: nó được mô phỏng theo thông số kỹ thuật W3C đã được thiết kế rõ ràng bởi ủy ban. Tuy nhiên, nó có sẵn ở bất cứ đâu và nếu bạn xử lý nó, bạn sẽ không gặp phải các đối số "Tôi thích Dom4J", "Tôi thích JDOM", "Tôi thích StringBuffer" đến từ các thư viện của bên thứ ba. Đặc biệt là vì các đối số như vậy có thể biến thành các đoạn mã khác nhau bằng cách sử dụng các thư viện khác nhau ...

Tuy nhiên, như tôi đã nói, tôi có cải tiến một chút: thư viện XML thực tế là một tập hợp các lớp tiện ích giúp làm việc với DOM dễ dàng hơn . Khác với trình bao bọc XPath, không có gì phức tạp ở đây, chỉ là một loạt các quy trình mà tôi thấy mình phải viết lại cho mọi công việc.


2
Tôi đồng ý. Tôi đã từng thề với JDom, nhưng nhận thấy rằng sau khi tôi viết một vài phương thức trợ giúp, nội dung JAX-P không còn khó nữa và nó được cài đặt ở khắp mọi nơi.
Dave Ray

1
JAXB cũng là bản dựng sẵn và khá đẹp.
Adam Gent

10

Tôi đã sử dụng XMLTool để thay thế Dom4j và nó hoạt động khá tốt.

Công cụ XML sử dụng mẫu Giao diện Thông thạo để hỗ trợ các thao tác XML:

XMLTag tag = XMLDoc.newDocument(false)
   .addDefaultNamespace("http://www.w3.org/2002/06/xhtml2/")
   .addNamespace("wicket", "http://wicket.sourceforge.net/wicket-1.0")
   .addRoot("html")
   .addTag("wicket:border")
   .gotoRoot().addTag("head")
   .addNamespace("other", "http://other-ns.com")
   .gotoRoot().addTag("other:foo");
System.out.println(tag.toString());

Nó được tạo cho Java 5 và thật dễ dàng để tạo một đối tượng có thể lặp lại trên các phần tử đã chọn:

for (XMLTag xmlTag : tag.getChilds()) {
   System.out.println(xmlTag.getCurrentTagName());
}

Điều này trông thật tuyệt vời, chính xác là những gì tôi cần để hỗ trợ một số thử nghiệm theo hướng dữ liệu.
FDM

6

Tôi luôn thích jdom . Nó được viết để trực quan hơn so với phân tích cú pháp DOM (và phân tích cú pháp SAX luôn có vẻ vụng về).

Từ tuyên bố sứ mệnh:

Không có lý do thuyết phục nào để một API Java thao tác XML trở nên phức tạp, lắt léo, không trực quan hoặc khiến bạn đau cổ. JDOMTM tập trung vào Java và được tối ưu hóa cho Java. Nó hoạt động giống như Java, nó sử dụng các bộ sưu tập Java, nó là API hoàn toàn tự nhiên cho các nhà phát triển Java hiện tại và nó cung cấp một điểm nhập chi phí thấp để sử dụng XML.

Đó là kinh nghiệm của tôi - điều hướng khá trực quan của các cây nút.


Mát mẻ. Bạn đã đọc câu cuối cùng của câu hỏi của tôi? ;-)
Jonik

+1 - Đơn giản hơn tất cả những thứ W3C đó.
duffymo

2
Gần đây, tôi đã sử dụng JDOM trong một dự án và mặc dù API rất trực quan, nhưng tôi gặp hai vấn đề với nó: sự phát triển dường như bị đình trệ (bản cập nhật cuối cùng là cuối năm 2007) và thư viện vẫn chưa được tổng quát hóa.
cdmckay

1
Nếu tôi chọn JDOM so với XOM, tôi chọn XOM.
dma_k

3
Có vẻ như JDOM 2.0.0 vừa được phát hành : "2.0.0 đưa JDOM vào thế giới Generics và các mục ngôn ngữ Java khác được giới thiệu với Java 5."
Jonik

5

Tôi sử dụng XStream , một thư viện đơn giản để tuần tự hóa các đối tượng sang XML và quay lại.

nó có thể theo hướng chú thích (như JAXB), nhưng nó có api rất đơn giản và dễ sử dụng và bạn thậm chí có thể tạo JSON.


Có vẻ rất đơn giản. Tôi chỉ tự hỏi nó thực sự hoạt động như thế nào: nếu tôi có một tệp XML được tải xuống từ internet, làm thế nào XStream biết nó nên được giải mã cho lớp nào?
ettore

@ettore không. Bạn nên sử dụng JAXB cho những thứ như vậy vì nó hiểu lược đồ và WSDL.
Adam Gent

1
Không thực sự là một giải pháp thay thế cho một API XML có mục đích chung như dom4j. Nó chỉ là một serializer / deserializer, phải không?
zehrer

3

Tôi sẽ thêm vào câu trả lời có sẵn của @kdgregory bằng cách nói tại sao không phải là JAXB?

Với một vài chú thích, nó khá dễ dàng để mô hình hóa hầu hết các tài liệu XML. Ý tôi là bạn có thể sẽ phân tích cú pháp nội dung và đưa vào một đối tượng phải không?

JAXB 2.0 được tích hợp sẵn trên JDK 1.6 và không giống như nhiều thư viện javax tích hợp khác, thư viện này khá tốt (Kohusuke đã làm việc trên nó nên bạn biết cái hay của nó).


Tôi tự hỏi làm thế nào JAXB 2.0 so sánh với một lib XML dựa trên chú thích nhẹ như Simple , về mặt đơn giản và tránh viết sẵn ..? (Trở lại trong ngày khi tôi hỏi câu hỏi này, tôi loại JAXB bỏ lỡ hoàn toàn, nhưng tôi đoán xứng đáng là một cái nhìn gần hơn, nếu một nhu cầu để làm XML với Java.)
Jonik

3

Trong một dự án gần đây, tôi phải thực hiện một số phân tích cú pháp XML và cuối cùng đã sử dụng Simple Framework , được một đồng nghiệp giới thiệu.

Cuối cùng thì tôi khá hài lòng với nó. Nó sử dụng cách tiếp cận dựa trên chú thích để ánh xạ các phần tử và thuộc tính XML tới các lớp và trường Java.

<example>
  <a>
    <b>
      <x>foo</x>
    </b>
    <b>
      <y>bar</y>
    </b>
  </a>
</example>

Mã Java tương ứng:

@Root
public class Example {

   @Path("a/b[1]")
   @Element
   private String x;

   @Path("a/b[2]")
   @Element
   private String y;
}

Tất cả hoàn toàn khác với dom4j hoặc XOM. Bạn tránh viết mã xử lý XML ngu ngốc, viết sẵn, nhưng lúc đầu có thể bạn sẽ đập đầu vào tường trong một lúc để cố gắng làm cho đúng các chú thích.

(Chính tôi là người đã hỏi câu hỏi này 4 năm trước. Mặc dù XOM có vẻ là một sự thay thế dom4j khá phổ biến và khá phổ biến, nhưng tôi vẫn chưa hoàn toàn nắm bắt được nó. Tò mò rằng không ai đề cập đến Simple Framework ở đây. Tôi quyết định sửa lỗi đó, vì tôi có thể sẽ sử dụng lại.)


1

Trong dự án của chúng tôi, chúng tôi đang sử dụng http://www.castor.org/ nhưng chỉ dành cho các tệp XML nhỏ. Nó thực sự dễ học, chỉ cần một tệp XML ánh xạ (hoặc không cần tệp nào nếu các thẻ XML khớp hoàn toàn với các thuộc tính lớp) là xong. Nó hỗ trợ người nghe (như gọi lại) để thực hiện xử lý bổ sung. Nhược điểm: nó không phải là một tiêu chuẩn Java EE như JAXB.


Castor không hỗ trợ JAXB. Và bạn có thể lựa chọn sử dụng tệp ánh xạ hoặc sử dụng lược đồ XML và trình tạo mã Castor.
Eddie

Tôi không biết, cảm ơn vì thông tin!
Lluis Martinez


0

Đôi khi tôi đang sử dụng Jericho , công cụ chủ yếu là trình phân tích cú pháp HTML, nhưng có thể phân tích cú pháp bất kỳ cấu trúc nào giống XML.

Tất nhiên nó chỉ dành cho các thao tác XML đơn giản nhất, chẳng hạn như tìm các thẻ có tên đã cho, lặp qua cấu trúc, thay thế các thẻ và các thuộc tính của nó, nhưng đây không phải là trường hợp sử dụng nhiều nhất sao?


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.