Xml có được bao gồm trong python không?

Bây giờ chúng tôi đã giới thiệu cho bạn về thế giới của XML, chúng tôi sẽ xem xét những gì Python mang lại cho bảng. Chúng tôi sẽ xem xét các tính năng của Python áp dụng cho XML, sau đó chúng tôi sẽ đưa ra một số ví dụ cụ thể về Python với XML. Là một ngôn ngữ cấp rất cao, Python bao gồm nhiều cấu trúc dữ liệu mạnh mẽ như một phần của ngôn ngữ cốt lõi và các thư viện. Các phiên bản Python mới hơn, từ 2. 0 trở đi, bao gồm hỗ trợ tuyệt vời cho Unicode và phạm vi mã hóa ấn tượng, cũng như tốc độ xuất sắc [và nhanh. ] Trình phân tích cú pháp XML cung cấp dữ liệu ký tự từ XML dưới dạng chuỗi Unicode. Thư viện chuẩn của Python cũng chứa các triển khai của giao diện DOM và SAX tiêu chuẩn ngành để làm việc với dữ liệu XML và có sẵn hỗ trợ bổ sung cho các trình phân tích cú pháp và giao diện thay thế

Tất nhiên, điều này cũng có thể nói về các ngôn ngữ cấp cao hiện đại khác. Java chắc chắn bao gồm một thư viện ấn tượng gồm các cấu trúc dữ liệu có khả năng sử dụng cao và Perl cũng cung cấp các cấu trúc dữ liệu tương đương. Điều gì khiến Python được ưa chuộng hơn các ngôn ngữ đó và thư viện của chúng?

  • Mã nguồn Python dễ đọc và dễ bảo trì

  • Trình thông dịch tương tác giúp việc thử các đoạn mã trở nên đơn giản

  • Python cực kỳ di động, nhưng không hạn chế quyền truy cập vào các khả năng dành riêng cho nền tảng

  • Các tính năng hướng đối tượng mạnh mẽ mà không bị che khuất

Có nhiều ngôn ngữ có khả năng làm những gì có thể làm với Python, nhưng rất hiếm khi tìm thấy tất cả các phẩm chất “ngoại vi” của Python trong bất kỳ ngôn ngữ nào. Những phẩm chất này không làm cho Python có nhiều khả năng hơn, nhưng chúng làm cho nó dễ áp ​​​​dụng hơn nhiều, giảm thời gian lập trình. Điều này cho phép dành nhiều thời gian hơn để tìm ra những cách tốt hơn để giải quyết các vấn đề thực tế hoặc chỉ cho phép lập trình viên chuyển sang vấn đề tiếp theo. Ở đây chúng tôi thảo luận chi tiết hơn về các tính năng này

Dễ đọc và bảo trì

Là một ngôn ngữ lập trình, Python thể hiện sự rõ ràng trong cách diễn đạt. Mặc dù một số lập trình viên quen với các ngôn ngữ khác ngạc nhiên khi sử dụng khoảng trắng quan trọng của Python, nhưng mọi người dường như nghĩ rằng nó làm cho mã nguồn Python dễ đọc hơn đáng kể so với các ngôn ngữ yêu cầu thêm các ký tự đặc biệt để đánh dấu cấu trúc trong nguồn. Cấu trúc của Python không đơn giản hơn cấu trúc của các ngôn ngữ khác, nhưng cú pháp khác biệt làm cho mã nguồn “cảm thấy” sạch hơn nhiều trong Python

Việc sử dụng khoảng trắng cũng giúp tránh những khác biệt nhỏ về phong cách, chẳng hạn như vị trí của các dấu ngoặc nhọn cấu trúc, do đó, có mức độ nhất quán trực quan cao hơn trên mã của các lập trình viên khác nhau. Mặc dù điều này có vẻ như là một việc nhỏ đối với nhiều lập trình viên, nhưng hiệu quả là việc duy trì mã được viết bởi một lập trình viên khác trở nên dễ dàng hơn nhiều đơn giản vì việc tập trung vào cấu trúc và thuật toán thực tế của mã dễ dàng hơn. Đối với cá nhân lập trình viên, đây là một lợi ích phụ tốt, nhưng đối với một doanh nghiệp, điều này dẫn đến chi phí bảo trì mã thấp hơn

Lập trình khám phá trong một trình thông dịch tương tác

Nhiều ngôn ngữ lập trình cấp cao hiện đại cung cấp trình thông dịch, nhưng rất ít ngôn ngữ tỏ ra thành công trong việc này như Python. Những người khác, chẳng hạn như Java, thường không cung cấp trình thông dịch. Nếu chúng ta xem xét Perl, một ngôn ngữ được cho là rất có khả năng khi được sử dụng từ dòng lệnh, thì chúng ta sẽ thấy rằng nó không được trang bị một trình thông dịch phong phú. Nếu chúng ta khởi động trình thông dịch Perl mà không đặt tên cho tập lệnh, thì nó chỉ đợi chúng ta nhập một tập lệnh hoàn chỉnh vào bàn điều khiển, sau đó thông dịch tập lệnh khi chúng ta hoàn thành. Nó cho phép chúng tôi nhập trực tiếp một vài lệnh trên dòng lệnh, nhưng không có khả năng chạy từng câu lệnh một và kiểm tra kết quả khi chúng tôi thực hiện để xác định xem từng đoạn mã có đang thực hiện chính xác những gì chúng tôi mong đợi hay không. Với Python, trình thông dịch tương tác cung cấp một môi trường phong phú để thực hiện các câu lệnh riêng lẻ và kiểm tra kết quả

Tính di động không hạn chế

Trình thông dịch Python là một trong những trình thông dịch ngôn ngữ di động nhất hiện có. Nó được biết là chạy trên các nền tảng khác nhau, từ PDA và các hệ thống nhúng khác đến một số nền tảng đa bộ xử lý mạnh nhất từng được xây dựng. Nó có thể chạy trên nhiều hệ điều hành hơn có lẽ bất kỳ trình thông dịch nào khác. Hơn nữa, mã ứng dụng được viết cẩn thận có thể chia sẻ nhiều tính di động này. Python cung cấp một loạt các trừu tượng vừa đủ để che giấu sự khác biệt của nền tảng trong khi cho phép lập trình viên sử dụng dịch vụ của các nền tảng cụ thể khi cần thiết

Khi một ứng dụng yêu cầu quyền truy cập vào các cơ sở hoặc thư viện mà Python không cung cấp, Python cũng giúp dễ dàng thêm các tiện ích mở rộng để tận dụng các cơ sở bổ sung này. Có thể tạo các mô-đun bổ sung [thường bằng C hoặc C++, nhưng cũng có thể sử dụng các ngôn ngữ khác] cho phép mã Python gọi các cơ sở bên ngoài một cách hiệu quả

Hướng đối tượng mạnh mẽ nhưng dễ tiếp cận

Có một thời, người ta thường nghe về cách lập trình hướng đối tượng [OOP] sẽ giải quyết hầu hết các vấn đề kỹ thuật mà các lập trình viên phải xử lý trong mã của họ. Tất nhiên, các lập trình viên biết rõ hơn, đẩy lùi và biến các khái niệm thành các công cụ hữu ích có thể được áp dụng khi thích hợp [mặc dù nó nên được áp dụng như thế nào và khi nào có thể luôn là chủ đề tranh luận]. Thật không may, nhiều ngôn ngữ hỗ trợ mạnh mẽ cho OOP hoặc rất tẻ nhạt khi làm việc với [chẳng hạn như C ++ hoặc ở mức độ thấp hơn là Java] hoặc chúng không được chấp nhận rộng rãi để sử dụng chung [chẳng hạn như Eiffel]

Python thì khác. Ngôn ngữ hỗ trợ hướng đối tượng mà không có nhiều chi phí cú pháp được tìm thấy trong nhiều ngôn ngữ hướng đối tượng được sử dụng rộng rãi, giúp dễ dàng xác định các loại đối tượng mới. Không giống như nhiều ngôn ngữ khác, Python có tính đa hình cao; . Điều này giúp dễ dàng tạo các đối tượng hữu ích mà không cần phải viết mã chỉ tồn tại để phù hợp với giao diện, nhưng mã đó sẽ không thực sự được sử dụng trong một ứng dụng cụ thể. Khi được kết hợp với lợi thế tuyệt vời mà thư viện tiêu chuẩn của Python có nhiều giao diện phổ biến mang lại, giá trị của việc tạo các đối tượng có thể tái sử dụng dễ dàng được nhận ra, trong khi vẫn duy trì sự dễ dàng triển khai các giao diện hữu ích

Ba gói chính cung cấp các công cụ Python để làm việc với XML. Đây là, từ được sử dụng phổ biến nhất đến lớn nhất

  1. Thư viện chuẩn Python

  2. PyXML, do Python XML Special Interest Group sản xuất

  3. 4Suite, được cung cấp bởi Four Thought, Inc

Thư viện chuẩn Python cung cấp một bộ giao diện tối thiểu nhưng hữu ích để làm việc với XML, bao gồm giao diện cho trình phân tích cú pháp XML Expat phổ biến, triển khai API đơn giản nhẹ cho XML [SAX] và triển khai cơ bản của Mô hình đối tượng tài liệu cốt lõi . Việc triển khai DOM hỗ trợ Cấp 1 và phần lớn Cấp 2 của đặc tả DOM từ W3C, nhưng không triển khai hầu hết các tính năng tùy chọn. Tài liệu trong thư viện chuẩn được lấy từ tài liệu ban đầu trong gói PyXML và tài liệu bổ sung được đóng góp bởi các nhà phát triển Python XML hàng đầu

PyXML là một gói có nhiều tính năng hơn; . Gói được duy trì như một nỗ lực của cộng đồng bởi nhiều lập trình viên Python/XML tích cực nhất

4Suite không phải là tập hợp thay thế của các gói khác, nhưng được dùng để bổ sung cho PyXML. Nó cung cấp các triển khai DOM bổ sung được điều chỉnh cho các ứng dụng khác nhau, hỗ trợ các thông số kỹ thuật của XLink và XPulum và các công cụ để làm việc với dữ liệu Khung mô tả tài nguyên [RDF]

Đây là những gói được sử dụng xuyên suốt cuốn sách; . Vẫn còn nhiều hơn nữa;

Hai API cơ bản và được sử dụng rộng rãi nhất cho dữ liệu XML là giao diện SAX và DOM. Các giao diện này khác nhau đáng kể;

SAX định nghĩa một giao diện cấp thấp tương đối dễ hỗ trợ cho các trình phân tích cú pháp XML, nhưng yêu cầu người lập trình ứng dụng quản lý nhiều chi tiết hơn về việc sử dụng thông tin trong các tài liệu XML và thực hiện các thao tác trên đó. Nó cung cấp lợi thế của chi phí thấp. không có cấu trúc dữ liệu lớn nào được xây dựng trừ khi bản thân ứng dụng thực sự cần chúng. Điều này cho phép nhiều hình thức xử lý tiến hành nhanh hơn nhiều so với mức có thể xảy ra nếu cần nhiều chi phí hơn và các tài liệu lớn hơn nhiều có thể được xử lý hiệu quả. Nó đạt được điều này bằng cách trở thành một giao diện hướng sự kiện; . Vậy làm cách nào để bạn có được “sự kiện” từ trình phân tích cú pháp XML và có thể có loại sự kiện nào?

SAX xác định một số giao diện trình xử lý mà ứng dụng của bạn có thể triển khai để nhận các sự kiện. Các phương thức của các đối tượng này được gọi khi các sự kiện thích hợp gặp phải trong tài liệu XML đang được phân tích cú pháp; . Các sự kiện được phân loại thành các sự kiện nội dung, loại tài liệu, từ vựng và lỗi; . Ứng dụng có thể chỉ định chính xác loại sự kiện mà nó muốn nhận bằng cách cung cấp cho trình phân tích cú pháp các trình xử lý thích hợp và loại bỏ những sự kiện mà nó không cần. Hỗ trợ XML của Python cung cấp các lớp cơ sở cho phép bạn chỉ triển khai các phương thức mà bạn quan tâm, chỉ kế thừa các phương thức không cần làm gì cho các sự kiện mà bạn không cần

Các sự kiện được sử dụng phổ biến nhất là các sự kiện liên quan đến nội dung, trong đó quan trọng nhất là startElement, charactersendElement. Chúng ta đã xem xét sâu về SAX trong Chương 3, nhưng bây giờ hãy xem nhanh cách chúng ta có thể sử dụng SAX để trích xuất một số thông tin hữu ích từ tài liệu. Chúng tôi sẽ sử dụng một tài liệu đơn giản; . Tài liệu được hiển thị ở đây

  
    The Cathedral & the Bazaar
    Eric S. Raymond
  
  
    Making TeX Work
    Norman Walsh
  
  

Nếu chúng tôi muốn tạo một từ điển ánh xạ các số ISBN được cung cấp trong thuộc tính isbn của các phần tử book với tên sách [nội dung của các phần tử title], chúng tôi sẽ tạo một trình xử lý nội dung [như được hiển thị trong ] xem xét

Ví dụ 1-1. người đóng sách. py

import xml.sax.handler

class BookHandler[xml.sax.handler.ContentHandler]:
  def __init__[self]:
    self.inTitle = 0
    self.mapping = {}

  def startElement[self, name, attributes]:
    if name == "book":
      self.buffer = ""
      self.isbn = attributes["isbn"]
    elif name == "title":
      self.inTitle = 1

  def characters[self, data]:
    if self.inTitle:
      self.buffer += data

  def endElement[self, name]:
    if name == "title":
      self.inTitle = 0
      self.mapping[self.isbn] = self.buffer

Trích xuất thông tin mà chúng tôi đang tìm kiếm bây giờ là tầm thường. Nếu đoạn mã trên nằm trong bookhandler. py và tài liệu mẫu của chúng tôi có trong sách. xml, chúng ta có thể làm điều này trong một phiên tương tác

>>> import xml.sax
>>> import bookhandler
>>> import pprint
>>> 
>>> parser = xml.sax.make_parser[  ]
>>> handler = bookhandler.BookHandler[  ]
>>> parser.setContentHandler[handler]
>>> parser.parse["books.xml"]
>>> pprint.pprint[handler.mapping]
{u'1-56592-051-1': u'Making TeX Work',
 u'1-56592-724-9': u'The Cathedral & the Bazaar'}

Để biết tài liệu tham khảo về các phương thức của đối tượng xử lý, hãy tham khảo Phụ lục C

DOM hoàn toàn ngược lại với SAX. SAX cung cấp một cửa sổ xem rất nhỏ chuyển qua tài liệu đầu vào, dựa vào ứng dụng để suy ra toàn bộ; . Thay vì báo cáo các sự kiện riêng lẻ cho ứng dụng khi trình phân tích cú pháp xử lý cú pháp tương ứng trong tài liệu, ứng dụng sẽ tạo một đối tượng đại diện cho toàn bộ tài liệu dưới dạng cấu trúc phân cấp. Mặc dù không có yêu cầu rằng tài liệu phải được phân tích cú pháp hoàn toàn và được lưu trữ trong bộ nhớ khi đối tượng được cung cấp cho ứng dụng, nhưng hầu hết các triển khai đều hoạt động theo cách đó để đơn giản hóa. Một số triển khai tránh điều này;

DOM cung cấp các đối tượng được gọi là các nút đại diện cho các phần của tài liệu cho ứng dụng. Có một số loại nút, mỗi loại được sử dụng cho một loại cấu trúc khác nhau. Điều quan trọng là phải hiểu rằng các nút của DOM không tương ứng trực tiếp với các sự kiện SAX, mặc dù nhiều nút tương tự. Cách dễ nhất để thấy sự khác biệt là xem cách các phần tử và nội dung của chúng được thể hiện trong cả hai API. Trong SAX, một phần tử được biểu thị bằng các sự kiện bắt đầu và kết thúc, đồng thời nội dung của nó được biểu thị bằng tất cả các sự kiện xảy ra giữa phần đầu và phần cuối. DOM cung cấp một đối tượng duy nhất đại diện cho phần tử và nó cung cấp các phương thức cho phép ứng dụng lấy các nút con đại diện cho nội dung của phần tử. Các loại nút khác nhau được cung cấp cho các thành phần, văn bản và mọi thứ khác có thể tồn tại trong tài liệu XML

Chúng ta sẽ đi vào chi tiết hơn và xem một số ví dụ mở rộng sử dụng DOM trong Chương 4 và tham chiếu chi tiết đến API DOM được đưa ra trong Phụ lục D. Để tìm hiểu nhanh về DOM, hãy viết một đoạn mã thực hiện điều tương tự như chúng ta làm với SAX trong , nhưng sử dụng cách triển khai DOM cơ bản từ thư viện chuẩn Python, như minh họa trong

import pprint

import xml.dom.minidom
from xml.dom.minidom import Node

doc = xml.dom.minidom.parse["books.xml"]

mapping = {}

for node in doc.getElementsByTagName["book"]:
  isbn = node.getAttribute["isbn"]
  L = node.getElementsByTagName["title"]
  for node2 in L:
    title = ""
    for node3 in node2.childNodes:
      if node3.nodeType == Node.TEXT_NODE:
        title += node3.data
    mapping[isbn] = title

# mapping now has the same value as in the SAX example:
pprint.pprint[mapping]

Rõ ràng là chúng ta đang giải quyết một vấn đề rất khác ở đây. Mặc dù có cùng một lượng mã trong ví dụ DOM, nhưng có thể rất khó phát triển các thành phần có thể tái sử dụng, trong khi kinh nghiệm với SAX thường chỉ ra cách để các thành phần có thể tái sử dụng chỉ với một chút tái cấu trúc. Có thể sử dụng lại mã DOM, nhưng tư duy yêu cầu rất khác. Những gì DOM cung cấp để bù đắp là một tài liệu có thể được thao tác tại các vị trí tùy ý với đầy đủ kiến ​​thức về tài liệu hoàn chỉnh và nội dung tài liệu có thể được trích xuất theo các cách khác nhau bởi các phần khác nhau của ứng dụng mà không cần phải phân tích cú pháp tài liệu nhiều lần. Đối với một số ứng dụng, điều này chứng tỏ là một lý do thúc đẩy mạnh mẽ để sử dụng DOM thay vì SAX

Các cách khác để trích xuất thông tin

SAX và DOM cung cấp cho chúng ta một số công cụ mạnh mẽ để làm việc với XML, nhưng rõ ràng chúng yêu cầu rất nhiều mã và sự chú ý đến từng chi tiết để sử dụng hiệu quả trong một ứng dụng lớn. Trong cả hai trường hợp, làm việc với dữ liệu phức tạp đòi hỏi rất nhiều công việc chỉ để trích xuất các bit thú vị từ các tài liệu XML có chứa dữ liệu. Bây giờ, loại công cụ nào chúng ta thường sử dụng khi xử lý các tập dữ liệu phức tạp? . May mắn thay, cả hai thứ này đều có sẵn cho chúng tôi khi làm việc với XML từ Python

Khi một người dùng XML muốn chỉ định một phần của tài liệu dựa trên các tiêu chí có thể phức tạp, cô ấy sử dụng một ngôn ngữ cho phép cô ấy viết đặc tả một cách chính xác; . Hỗ trợ cho XPath có sẵn trong gói 4Suite và gần đây cũng đã được thêm vào gói PyXML. Sử dụng XPath, có thể viết một truy vấn để chọn các nút từ cây DOM dựa trên tên phần tử, giá trị thuộc tính, nội dung văn bản và mối quan hệ giữa các nút. Chúng tôi trình bày chi tiết về XPath, bao gồm cách sử dụng nó với cây DOM trong Python, trong Chương 5

Những lần khác, những gì chúng tôi thực sự muốn là một tài liệu mới chứa ít thông tin hơn hoặc sắp xếp nó rất khác. Đối với điều này, chúng tôi cần một cách để chỉ định chuyển đổi tài liệu tạo tài liệu khác. Điều này được cung cấp bởi Chuyển đổi ngôn ngữ biểu định kiểu XML [XSLT]. Ban đầu được phát triển như một phần của đặc điểm kỹ thuật mới cho biểu định kiểu, XSLT là ngôn ngữ dựa trên XML được sử dụng để xác định các chuyển đổi từ XML sang các định dạng khác. XSLT được sử dụng phổ biến nhất với XML hoặc HTML làm định dạng đầu ra. Chương 6 mô tả ngôn ngữ này và chỉ ra cách sử dụng nó trong Python

Làm cách nào để ghi tệp XML bằng Python?

Tạo tài liệu XML bằng Python . import minidom for using xml. dom. Sau đó, chúng tôi tạo phần tử gốc và nối nó vào XML. Sau đó, tạo một sản phẩm con của cha mẹ là Geek for Geeks.

Làm cách nào để sử dụng thư viện XML trong Python?

Lộ trình tới Trình phân tích cú pháp XML trong Python .
Chọn đúng mô hình phân tích cú pháp XML. Mô hình đối tượng tài liệu [DOM].
Tìm hiểu về Trình phân tích cú pháp XML trong Thư viện chuẩn của Python. xml. nhà thờ. thiểu số. Triển khai DOM tối thiểu. .
Khám phá các thư viện trình phân tích cú pháp XML của bên thứ ba. .
Liên kết dữ liệu XML với các đối tượng Python. .
Gỡ bom XML bằng trình phân tích cú pháp an toàn
Phần kết luận

Thư viện XML trong Python là gì?

XML. XML là viết tắt của Ngôn ngữ đánh dấu có thể mở rộng . Nó được thiết kế để lưu trữ và vận chuyển dữ liệu. Nó được thiết kế để con người và máy có thể đọc được.

Gói Python nào tạo XML?

Tệp xml. etree. Mô-đun ElementTree triển khai API đơn giản và hiệu quả để phân tích cú pháp và tạo dữ liệu XML.

Chủ Đề