2010-02-28 33 views
13

Tôi biết một chút về mái vòm, và muốn tìm hiểu về ElementTree. Python 2.6 có triển khai ElementTree hơi cũ nhưng vẫn có thể sử dụng được. Tuy nhiên, có vẻ như nó đi kèm với hai lớp khác nhau: xml.etree.ElementTree và xml.etree.cElementTree. Có ai đó vui lòng tỏ ra tử tế với tôi bằng sự khác biệt của họ không? Cảm ơn bạn.Sự khác nhau giữa cElementtree và ElementTree là gì?

+2

Là một sang một bên, bạn có thể tìm thấy lxml.etree thú vị; trong khi một mô-đun bên thứ ba, đây là một phần mở rộng của đặc tả ElementTree và bao gồm các tính năng hữu ích như hỗ trợ XPath thực. –

Trả lời

24

Đó là cùng một thư viện (giống API, tính năng tương tự) nhưng ElementTree được thực hiện trong Python và cElementTree được triển khai tại C.

Nếu bạn có thể, hãy sử dụng triển khai C vì nó được tối ưu hóa để phân tích nhanh và sử dụng bộ nhớ thấp và nhanh hơn 15-20 lần so với triển khai Python.

Sử dụng phiên bản Python nếu bạn đang ở trong một môi trường giới hạn (không cho phép tải thư viện C).

+0

Có một số khác biệt tinh tế. Trong cElementTree, phương thức 'findtext' không có tham số' default' (xem bằng Python 2.7.13). Tuy nhiên, điều này có thể dễ dàng được thay thế bằng 'findtext (" ... ") hoặc" defaultValue "'. –

6

Từ http://effbot.org/zone/celementtree.htm:

Module cElementTree là một việc thực hiện C của API ElementTree, tối ưu hóa cho phân tích nhanh chóng và sử dụng bộ nhớ thấp. Trên các tài liệu điển hình, cElementTree là nhanh hơn so với phiên bản Python của ElementTree 15-20 lần, và sử dụng ít bộ nhớ 2-5 lần

4

ElementTree được triển khai trong python trong khi cElementTree được triển khai trong C. Vì vậy cElementTree sẽ nhanh hơn, nhưng cũng không khả dụng ở nơi bạn không có quyền truy cập C, chẳng hạn như trong Jython hoặc IronPython hoặc trên Google App Engine.

Có chức năng, chúng phải tương đương nhau.

+1

Tham khảo: http://docs.python.org/library/xml.etree.elementtree.html. "Việc triển khai C của API này có sẵn dưới dạng xml.etree.cElementTree. " –

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