8 Câu hỏi: Trình phân tích cú pháp XML tốt nhất cho Java [đã đóng]

câu hỏi được tạo ra tại Mon, Oct 26, 2015 12:00 AM

Tôi cần đọc các tệp XML nhỏ (ít nhất là MB, được mã hóa UTF-8), lục lọi xem xét các yếu tố và thuộc tính khác nhau, có thể sửa đổi một vài và viết lại XML ra đĩa (tốt nhất là tốt, định dạng thụt lề).

Điều gì sẽ là trình phân tích cú pháp XML tốt nhất cho nhu cầu của tôi? Có rất nhiều để lựa chọn. Một số tôi biết là:

Và tất nhiên là một trong JDK (Tôi đang sử dụng Java 6). Tôi quen thuộc với Xerces nhưng thấy nó vụng về.

Đề xuất?

    
381
  1. Tôi nghĩ rằng, bạn có thể tìm thấy nhiều người chơi hơn tại đây: xml.com/lpt/a/1703
    2010-03-18 12: 59: 05Z
  2. tôi nghĩ có vấn đề thực sự với câu hỏi này. 1 là nó đang so sánh hoàn toàn không giống nhau, các trình phân tích cú pháp (xerces, đỏ thẫm) cùng với các thư viện thao tác dom (dom4j, xom, jdom). Ngoài ra, các câu trả lời có xu hướng vận động và không mang tính xây dựng.
    2014-01-22 14: 05: 25Z
  3. + 220 và không mang tính xây dựng. Người điều hành và người dùng rõ ràng có quan điểm khác nhau về những gì mang tính xây dựng.
    2014-06-09 06: 40: 04Z
  4. Có, có vẻ như các mod bị cận thị khi gặp những câu hỏi như thế này. Có, các câu trả lời sẽ được đưa ra ý kiến ​​nhưng chắc chắn dựa trên kinh nghiệm và hầu hết các lần các câu trả lời được định lượng. Các mod cần tạo một thẻ khác nhau để di chuyển các câu hỏi này được mở để thảo luận, điều này dẫn đến sự chỉ trích và đầu ra mang tính xây dựng.
    2016-02-11 16: 26: 08Z
8 Câu trả lời                              8                         

Nếu tốc độ và bộ nhớ không có vấn đề, dom4j là một lựa chọn thực sự tốt. Nếu bạn cần tốc độ, sử dụng trình phân tích cú pháp StAX như Woodstox là cách đúng đắn, nhưng bạn phải viết thêm mã để hoàn thành công việc và bạn phải làm quen với xử lý XML theo luồng.

    
80
2013-12-24 08: 57: 33Z
  1. dom4j khá tốt, nhưng chắc chắn không phải không có vấn đề. Để biết các lựa chọn thay thế dom4j tốt, hãy xem stackoverflow.com/questions/831865/triệt
    2009-06-06 11: 13: 41Z

Tôi nghĩ bạn không nên xem xét bất kỳ triển khai trình phân tích cú pháp cụ thể nào. API Java để xử lý XML cho phép bạn sử dụng bất kỳ triển khai trình phân tích cú pháp tuân thủ nào theo cách tiêu chuẩn. Mã phải dễ mang theo hơn nhiều và khi bạn nhận ra rằng một trình phân tích cú pháp cụ thể đã quá cũ, bạn có thể thay thế nó bằng một mã khác mà không thay đổi một dòng mã của bạn (nếu bạn thực hiện đúng).

Về cơ bản, có ba cách xử lý XML theo cách tiêu chuẩn:

  • SAX Đây là API đơn giản nhất. Bạn đọc XML bằng cách xác định lớp Handler nhận dữ liệu bên trong các phần tử /thuộc tính khi XML được xử lý theo cách nối tiếp. Sẽ nhanh hơn và đơn giản hơn nếu bạn chỉ lập kế hoạch để đọc một số thuộc tính /thành phần và /hoặc viết lại một số giá trị (trường hợp của bạn).
  • DOM Phương thức này tạo một cây đối tượng cho phép bạn sửa đổi /truy cập ngẫu nhiên để tốt hơn cho sự phức tạp Thao tác và xử lý XML.
  • StAX Đây là ở giữa con đường giữa SAX và DOM. Bạn chỉ cần viết mã để lấy dữ liệu từ trình phân tích cú pháp mà bạn quan tâm khi nó được xử lý.
Apache Xerces XMLSerializer ) vì sẽ ràng buộc bạn với một triển khai cụ thể có thể phát triển kịp thời hoặc mất khả năng tương thích ngược, điều này sẽ khiến bạn thay đổi mã trong tương lai khi bạn muốn nâng cấp lên phiên bản mới của JDOM hoặc bất kỳ trình phân tích cú pháp nào bạn sử dụng. Nếu bạn tuân thủ API tiêu chuẩn Java (sử dụng các nhà máy và giao diện), mã của bạn sẽ có tính mô đun và dễ bảo trì hơn nhiều.

Không cần phải nói tất cả (tôi chưa kiểm tra tất cả, nhưng tôi gần như chắc chắn) các trình phân tích cú pháp được đề xuất tuân thủ triển khai JAXP để về mặt kỹ thuật bạn có thể sử dụng tất cả, bất kể đó là gì.

    
252
2014-04-21 09: 21: 24Z
  1. Trên thực tế, có 3 cách: StAX (javax.xml.stream) là tiêu chuẩn thứ ba.
    2009-04-23 04: 00: 54Z
  2. 2012-12-15 06: 42: 29Z
  3. @ kitokid Chrome cho tôi biết rằng trang đó có nội dung khó chịu trên đó. Thay vào đó, tôi đã sử dụng cách này: /xml/notes/xmlparser/IntroDOM.asp
    2012-12-17 18: 56: 51Z

Đây là một so sánh hay về DOM, SAX, StAX & THUẾ (Nguồn: http://doad.oracle.com/docs/cd/E17802_01/webservice/webservice/docs/1.6/tutorial/doc/SJSXP2.html "rel =" noreferrer " download.oracle.com/docs/cd/E17802_01/webservice/webservice/docs/1.6/tutorial/doc/SJSXP2.html )

  

THUẾ SAX DOM tính năng

Loại API Kéo, phát trực tuyến Đẩy, phát trực tuyến Trong quy tắc XSLT của cây bộ nhớ

Dễ sử dụng Trung bình cao Trung bình cao

Khả năng XPath Không Không Có Có

CPU & Bộ nhớ Khác nhau tốt Khác nhau Khác nhau

Chỉ chuyển tiếp Có Có Không Không

Đọc XML Có Có Có Có

Viết XML Có Không Có Có

CRUD Không Không Có Không

    
127
2011-04-14 15: 35: 04Z
  1. Bạn có thể viết XML bằng SAX. Phần chìm cung cấp một triển khai xử lý mà người dùng có thể gọi các sự kiện SAX trên để tạo đầu ra XML. (Tôi thấy rằng bảng có nguồn gốc và không hoặcvật liệu iginal, bảng mặc dù sai)
    2013-09-10 20: 38: 17Z

XML đơn giản http://simple.sourceforge.net/ rất dễ dàng cho (de) các đối tượng tuần tự hóa .

    
8
2011-07-23 19: 07: 32Z

Ngoài SAX và DOM còn có phân tích STaX có sẵn bằng XMLStreamReader, trình phân tích cú pháp kéo xml.

    
4
2008-12-18 01: 32: 15Z

Tôi đã tìm thấy dom4j là công cụ để làm việc với XML. Đặc biệt so với Xerces.

    
3
2013-12-24 09: 04: 57Z

Tôi không khuyến nghị rằng bạn có nhiều "suy nghĩ" trong ứng dụng của mình, nhưng sử dụng XSLT có thể tốt hơn (và có khả năng nhanh hơn với trình biên dịch XSLT-by-byte) so với thao tác Java.

    
2
2008-12-18 01: 42: 47Z
  1. Tốt hơn, có thể: nhanh hơn, rất khó xảy ra.
    2009-04-09 06: 18: 27Z
  2. Đọc, thao tác và viết XML chính xác là những gì XSLT được thiết kế để làm. Đây là một câu trả lời tuyệt vời.
    2014-11-17 14: 01: 22Z

Nếu bạn ít quan tâm đến hiệu năng, tôi là một fan hâm mộ lớn của Apache Digester, vì về cơ bản, nó cho phép bạn ánh xạ trực tiếp từ XML sang Đậu Java.

Nếu không, trước tiên bạn phải phân tích cú pháp và sau đó xây dựng các đối tượng của mình.

    
1
2008-12-18 01: 33: 36Z
  1. Tôi không cần tạo Đậu Java, chỉ cần thao tác các phần tử XML thô một chút và xem xét một số phần tử nhất định để lấy dữ liệu từ chúng, vì vậy trình phân tích cú pháp kiểu DOM là có lẽ là giải pháp lý tưởng của tôi.
    2008-12-18 01: 48: 29Z
  2. Yea, dom4j có lẽ sẽ là một giải pháp tốt hơn ở đó ... Tôi đã từng sử dụng nó rất nhiều, cho đến khi tôi lên một cấp để xử lý
    2008-12-18 06: 03: 02Z
nguồn đặt đây