Python có thể phân tích cú pháp và thay đổi tài liệu XML. Để phân tích một tài liệu XML, bạn phải có toàn bộ tài liệu XML trong bộ nhớ. Hãy cho chúng tôi xem làm thế nào chúng ta có thể phân tích cú pháp XML trong python thông qua các ví dụ
Dự án học sâu để phát hiện văn bản trong hình ảnh bằng Python
Dữ liệu được lưu trữ trong tệp XML được sử dụng làm ví dụ –
Output: Item1 Item2 Item3 Item4 Item521
Phân tích cú pháp XML trong python bằng Minidom
DOM [mô hình đối tượng tài liệu] của World Wide Web Consortium là một API đa ngôn ngữ để đọc và thay đổi nội dung XML. Python cho phép bạn phân tích các tệp XML bằng xml. nhà thờ. thiểu số. Nó ít phức tạp hơn DOM API hoàn chỉnh
Output: Item1 Item2 Item3 Item4 Item522
Output: Item1 Item2 Item3 Item4 Item523
Output: Item1 Item2 Item3 Item4 Item524
Output: Item1 Item2 Item3 Item4 Item525
Output: Item1 Item2 Item3 Item4 Item526
Output: Item1 Item2 Item3 Item4 Item527
Ở đây, chúng tôi đang sử dụng xml. cây etree. Mô-đun ElementTree [gọi tắt là ET]. Element Tree có hai lớp cho mục đích này – ElementTree đại diện cho toàn bộ tài liệu XML
dưới dạng cây và Element đại diện cho một nút duy nhất trong cây này. Các tương tác với toàn bộ tài liệu [đọc và ghi vào/từ tệp] thường được thực hiện ở cấp độ ElementTree. Các tương tác với một phần tử XML đơn lẻ và các phần tử con của nó được thực hiện ở cấp Phần tử.
Ok, bây giờ chúng ta hãy xem qua hàm parseXML[]
tree = ET.parse[xmlfile]
Ở đây, chúng tôi tạo một đối tượng ElementTree bằng cách phân tích cú pháp xmlfile đã truyền
Output: Item1 Item2 Item3 Item4 Item57
Hàm getroot[] trả về gốc của cây dưới dạng đối tượng Element
Output: Item1 Item2 Item3 Item4 Item57
Bây giờ, khi bạn đã xem qua cấu trúc tệp XML của mình, bạn sẽ nhận thấy rằng chúng tôi chỉ quan tâm đến phần tử mục.
. /channel/item thực sự là cú pháp XPath [XPath là ngôn ngữ để đánh địa chỉ các phần của tài liệu XML]. Ở đây, chúng tôi muốn tìm tất cả các mục cháu của kênh con của gốc [ký hiệu là '. '] thành phần.
Bạn có thể đọc thêm về cú pháp XPath được hỗ trợ.
Output: Item1 Item2 Item3 Item4 Item56
Bây giờ, chúng tôi biết rằng chúng tôi đang lặp qua các phần tử mục trong đó mỗi phần tử mục chứa một tin tức. Vì vậy, chúng tôi tạo một từ điển tin tức trống trong đó chúng tôi sẽ lưu trữ tất cả dữ liệu có sẵn về mục tin tức. Để lặp qua từng phần tử con của một phần tử, chúng ta chỉ cần lặp qua nó, như thế này
Output: Item1 Item2 Item3 Item4 Item56
Bây giờ, hãy chú ý một phần tử vật phẩm mẫu ở đây
Chúng tôi sẽ phải xử lý riêng các thẻ không gian tên khi chúng được mở rộng thành giá trị ban đầu, khi được phân tích cú pháp. Vì vậy, chúng tôi làm một cái gì đó như thế này
Output: Item1 Item2 Item3 Item4 Item56
con. attrib là một từ điển của tất cả các thuộc tính liên quan đến một phần tử. Ở đây, chúng tôi quan tâm đến thuộc tính url của phương tiện. thẻ không gian tên nội dung.
Bây giờ, đối với tất cả những đứa trẻ khác, chúng tôi chỉ đơn giản là làm.
tree = ET.parse[xmlfile]7
trẻ em. thẻ chứa tên của phần tử con. trẻ em. văn bản lưu trữ tất cả văn bản bên trong phần tử con đó. Vì vậy, cuối cùng, một phần tử mục mẫu được chuyển thành từ điển và trông như thế này
tree = ET.parse[xmlfile]6
Sau đó, chúng ta chỉ cần thêm phần tử dict này vào danh sách newsitems.
Cuối cùng, danh sách này được trả về.
Bây giờ, chúng tôi chỉ cần lưu danh sách các mục tin tức vào tệp CSV để có thể sử dụng hoặc sửa đổi dễ dàng trong tương lai bằng cách sử dụng hàm savetoCSV[]. Để biết thêm về cách ghi các thành phần từ điển vào tệp CSV, hãy xem qua bài viết này.
Làm việc với tệp CSV bằng Python
Vì vậy, bây giờ, đây là cách dữ liệu được định dạng của chúng tôi trông giống như bây giờ
Như bạn có thể thấy, dữ liệu tệp XML phân cấp đã được chuyển đổi thành tệp CSV đơn giản để tất cả các tin bài được lưu trữ dưới dạng bảng. Điều này cũng giúp mở rộng cơ sở dữ liệu dễ dàng hơn.
Ngoài ra, người ta có thể sử dụng trực tiếp dữ liệu dạng JSON trong ứng dụng của mình. Đây là giải pháp thay thế tốt nhất để trích xuất dữ liệu từ các trang web không cung cấp API công khai nhưng cung cấp một số nguồn cấp dữ liệu RSS.
Tất cả mã và tệp được sử dụng trong bài viết trên có thể được tìm thấy tại đây
Tiếp theo là gì?
- Bạn có thể xem thêm nguồn cấp dữ liệu rss của trang web tin tức được sử dụng trong ví dụ trên. Bạn cũng có thể thử tạo một phiên bản mở rộng của ví dụ trên bằng cách phân tích cú pháp các nguồn cấp dữ liệu rss khác
- Bạn có phải là một fan hâm mộ môn cricket? . Bạn có thể phân tích cú pháp tệp XML này để thu thập thông tin về các trận đấu cricket trực tiếp và sử dụng để tạo trình thông báo trên màn hình
Câu đố về HTML và XML
Bài viết này được đóng góp bởi Nikhil Kumar. Nếu bạn thích GeeksforGeeks và muốn đóng góp, bạn cũng có thể viết một bài báo và gửi bài viết của mình tới review-team@geeksforgeeks. tổ chức. Xem bài viết của bạn xuất hiện trên trang chính của GeeksforGeeks và trợ giúp các Geeks khác
Vui lòng viết bình luận nếu bạn thấy bất cứ điều gì không chính xác hoặc bạn muốn chia sẻ thêm thông tin về chủ đề thảo luận ở trên