2011-11-05 36 views
26

Tôi đã sử dụng minidom để phân tích cú pháp XML trong nhiều năm. Bây giờ tôi đột nhiên biết về Element Tree. Câu hỏi của tôi là tốt hơn để phân tích cú pháp? Đó là:Phân tích cú pháp XML: Cây phần tử (etree) so với minidom

  • Cái nào nhanh hơn?
  • Sử dụng ít bộ nhớ hơn?
  • Có phụ thuộc O (n^2) nào mà tôi phải lo lắng không?
  • Một tài khoản có bị khấu hao vì lợi ích của người khác không?

Tại sao chúng ta có hai giao diện?

Cảm ơn.

Trả lời

14

Python có hai giao diện có thể vì Element Tree được tích hợp vào thư viện chuẩn một thỏa thuận tốt sau khi minidom xuất hiện. Lý do cho điều này có thể là API "Pythonic" xa hơn nhiều so với DOM được kiểm soát bởi W3C.

Nếu bạn lo ngại về tốc độ, cũng có lxml, xây dựng DOM tương thích ElementTree sử dụng libxml2 và phải khá nhanh - chúng có bộ điểm chuẩn so sánh bản thân với triển khai Python và C của ElementTree.

Nếu bạn lo lắng về việc sử dụng bộ nhớ, bạn không nên sử dụng API cây anyway; PullDOM có thể là một lựa chọn tốt hơn, nhưng tôi ngoại suy từ kinh nghiệm bằng cách sử dụng trình phân tích cú pháp kéo tuyệt vời của Java - dường như không có nhiều thông tin hiện tại về PullDOM.

17

Giao diện DOM và Sax để phân tích cú pháp XML là các cách cổ điển để làm việc với XML. Python phải cung cấp những giao diện này vì chúng rất nổi tiếng và tiêu chuẩn.

Gói ElementTree được thiết kế để cung cấp giao diện Pythonic hơn. Đó là tất cả về làm cho mọi thứ dễ dàng hơn cho các lập trình viên.

Tùy thuộc vào bản dựng của bạn, mỗi người trong số đó đều có triển khai C cơ bản để chúng chạy nhanh.

Không có công cụ nào ở trên không được dùng nữa. Họ từng có giá trị của họ (Sax không cần phải đọc toàn bộ đầu vào vào bộ nhớ, ví dụ).

Ngoài ra còn có mô-đun bên thứ ba được gọi là lxml cũng là một lựa chọn phổ biến (đầy đủ tính năng và nhanh).

+3

Và nếu bạn có vấn đề về hiệu suất với phần tử, có lxml cung cấp giao diện tương thích nhưng sử dụng thư viện C được sửa cứng, điều chỉnh phía sau hậu trường. – delnan

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