Làm việc với XML trong Python (tiếp tục)
Trong một vài trường hợp, đặc biệt khi bạn có một cấu trúc nested sâu và cố gắng đi đến một phần tử cụ thể, phương thức
iter() có thể là hữu dụng. Nó cho phép bạn lặp trên tất cả phần tử tree với một tag nhất định:
>>> for vendor in tree.iter(‘vendor’):
… print(vendor.text)
…
Cisco
Arista
Juniper
Cái này giải phóng cho bạn khỏi phải sử dụng các thứ như nested for loop, hay các lời gọi find() móc xích hay findall(),
. Trong trường hợp này, bạn chỉ cần yêu cầu cho tất cả phần tử vendor trong toàn bộ tree và lặp trên chúng.
Như bạn có thể tưởng tượng, tìm kiếm các trees lớn có thể bị chút phức tạp. May mắn là, Python bao gồm hỗ trợ hạn
chế cho XPath, một ngôn ngữ expression cái giúp đơn giản hóa tìm kiếm qua một tài liệu XML. Bạn có thể cung cấp
một biểu thức XPath đơn giản như một tham số tới phương thức findall(), cái sau đó sẽ trả về tất cả các phần tử
trong tree cái khớp với biểu thức đó:
>>> for model in tree.findall(“./device/model”):
… print(model.text)
Nexus 7700
Arista 7800
QFX 10008
Bạn cũng có thể định vị các nodes dựa trên kết hợp của các thuộc tính metadata (e.g các thuộc tính name) cũng như name
phần tử. Đây là nơi các thứ có thể trở nên thực sự mạnh mẽ. Giả sử bạn muốn tìm kiếm model cho device tên sw01:
>>> tree.find(“./device[@name=’sw01′]/model”).text
‘Nexus 7700’
Bạn xây dựng trên biểu thức trước bằng cách chỉ ra thuộc tính và giá trị mong muốn cùng với device trong đường dẫn.
Tuy nhiên, bạn vẫn có thể nhận một xử lí trên phần tử model, vì phần /model còn lại của biểu thức.
Nhiều phần còn lại hơn để đào sâu vào ở đây, nhưng một giải thích chi tiết về XPath hơi một chút bên ngoài phạm vi
của học phần này. Cái đó đã nói rằng, nếu bạn đang có kế hoạch làm việc với XML thường xuyên, đặc biệt các tài liệu
XML lớn, XPath là một công cụ quan trọng để có trong hộp công cụ của bạn. Tài liệu hướng dẫn Python chính thức trên
xml module chứa nhiều ví dụ hữu dụng.
Công cụ khác cho làm việc với dữ liệu XML là XQuery. XQuery là một ngôn ngữ truy vấn đầy đử, tương tự như SQL là gì
cho các CSDL quan hệ, trong khi XPath là một cách thức để cung cấp các biểu thức đơn giản – điển hình là các
one-liners cho định vị dữ liệu bên trong tài liệu XML. Vì tính tương tự của chúng, bạn có thể tự hỏi liệu bạn có
nên học cả hai. XQuery hiếm khi được cần trong bối cảnh tự động hóa mạng. Hầu hết mọi lúc, một chút Python và
XPath có thể đưa bạn về bất cứ thứ gì bạn cần.