Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Extensible markup language (xml)

    EXTENSIBLE MARKUP LANGUAGE (XML)


    XML là một định dạng dữ liệu rất phổ biến được sử dụng nhiều trong tự động hóa cấu hình. Sau đây là một ví dụ rất đơn giản về cấu trúc XML trông như thế nào.


    <device>
    <Hostname>Rtr01</Hostname>
    <IPv4>192.168.1.5</IP4>
    <IPv6> </IPv6>
    </device>


    Bạn có thể thấy XML trông hơi giống với cú pháp HTML; nó được thiết kế để làm việc song song với HTML để vận chuyển và lưu trữ dữ liệu giữa các dịch vụ web và API. Cũng giống như HTML, thẻ (tag) có ý nghĩa và được sử dụng để bao bọc mối quan hệ của các phần tử bằng thẻ bắt đầu (<>) và thẻ đóng (</>). Tất cả đều không khác với JSON ở chỗ thẻ hoạt động như một khóa có giá trị. Bạn cũng có thể gán các thuộc tính cho thẻ bằng cách sử dụng cú pháp sau:


    >>>attribute name="some value"


    Điều này hoạt động giống như thành phần cung cấp cách biểu diễn dữ liệu.


    <?xml version="1.0" encoding="UTF-8" ?>
    <interface xmlns="ietf-interfaces">
    <name>GigabitEthernet2</name>
    <description>Wide Area Network</description>
    <enabled>true</enabled>
    <ipv4>
    <address>
    <ip>192.168.1.5</ip>
    <netmask>255.255.255.0</netmask>
    </address>
    </ipv4>
    </interface>





    Để làm việc với dữ liệu trên, bạn có thể sử dụng thư viện XML gốc, nhưng nó có một chút đường cong học tập” (learning curve) và có thể hơi khó sử dụng. Để dễ dàng hơn, bạn có thể sử dụng một mô-đun có tên xmltodict để chuyển đổi XML thành một dictionary có thứ tự trong Python. dictionary sử dụng các cặp khóa / giá trị (key/value), nơi các cặp khóa / giá trị được lưu trữ thường linh hoạt, nhưng trong trường hợp của XML, thứ tự thực sự quan trọng.


    >>>import xmltodict
    >>>with open("xml_sample.xml") as data:
    >>> xml_example = data.read()
    >>> xml_dict = xmltodict.parse(xml_example)
    >>> print(xml_dict)


    Bạn có thể xem các thay đổi của mình ở định dạng XML bằng cách sử dụng hàm unparsed. Bạn có thể sử dụng đối số pretty = True để định dạng XML nhằm làm cho nó dễ đọc hơn một chút.


    >>> print(xmltodict.unparse(xml_dict, pretty=True))


    Để ghi những thay đổi này trở lại file ban đầu của bạn, bạn có thể sử dụng code sau:


    >>>with open("xml_sample.xml", "w") as data:
    >>> data.write(xmltodict.unparse(xml_dict, pretty=True))

    Trong ví dụ tiếp theo, bạn có thể thấy cùng một dữ liệu như trong ví dụ trước nhưng được trình bày ở dạng XML. Do cấu trúc cú pháp của XML, phân giải tài liệu XML khác một chút với hai dạng còn lại.
    Click image for larger version

Name:	dataurl392496.png
Views:	18
Size:	22.0 KB
ID:	437456
    XML Library
    Python element and example
    minidom
    DOM object
    user.getElementsByTagName('name')[0].firstChild.data
    ElementTree Element Tree
    user.find('name').text
    xmltodict Dictionary
    user['name']
    untangle
    Object
    user.name.cdata
    Python cung cấp một số thư viện để thao tác dữ liệu XML. Sự khác biệt giữa các thư viện này là cách thức chúng phân giải các file XML vào các thành phần XML. Bạn có các tùy chọn như chuyển đổi các dữ liệu XML vào một đối tượng Python được đại diện như các nodes và các thuộc tính dùng thư viện phức tạp. Hoặc nếu bạn quen thuộc hơn với Document Object Model (DOM), bạn có thể dùng thư viện minidom, trong đó chuyển đổi dữ liệu XML vào các đối tượng DOM. Để có một trải nghiệm làm việc giống như làm việc với YAML hay JSON, bạn có thể dùng xmltodict, theo đó chuyển đổi một tài liệu XML sang một tự điển Python. Một phương án khác được sử dụng rất nhiều là thư viện ElementTree. Thư viện này mô tả dữ liệu XML sang một định dạng cấu trúc cây. Nó thường được mô tả như là một dạng lai giữa danh sách và tự điển bên trong Python.
    Do tính tiện dụng của nó, bạn quyết định sử dụng thư viện ElementTree để phân giải các dữ liệu XML. Như từ trước đến giờ, đầu tiên bản phải khai báo thư viện bên trong đoạn mã để sử dụng nó. ElementTree có sẵn với Python vì vậy chỉ một dòng lệnh import là đủ để dùng tất cả các chức năng của thư viện. Bởi vì thư viện có một tên dài, bạn có thể import toàn bộ thư viện dưới một cái tên khác, ví dụ ET, như trong đoạn mã ví dụ. Theo cách đó, bạn có thể đơn giản hóa các tên để về sau có thể dễ dàng tham chiếu với nó.
    Click image for larger version

Name:	dataurl392499.png
Views:	10
Size:	48.1 KB
ID:	437457
    Cũng giống như khi làm việc với các file định dạng dữ liệu khác, hành động đầu tiên bạn cần thực hiện là mở một file. Ở đây bạn khai báo hai biến. Đầu tiên là phân giải các dữ liệu đọc được vào một cấu trúc cây bằng cách tạo ra một đối tượng ElementTree. Bước thứ hai là truy xuất thành phân root của cây đó. Khi bạn đã truy cập được gốc, bạn có thể duyệt qua toàn bộ cấu trúc cây. Bạn có thể tưởng tượng cấu trúc cây như một đối tượng hình thành nên một biểu đồ được kết nối.
    Nếu bạn muốn tìm tất cả những thành phần bởi một tên cụ thể, bạn có thể dùng phương thức findall() trên cây ElementTree. Khi bạn đang tìm kiếm cho một tên nhãn cụ thể, bạn sẽ dùng phương thức find() để truy xuất nó. Cuối cùng, nếu bạn muốn truy cập giá trị của nhãn (tag), bạn có thể sử dụng thuộc tính của text. Trường hợp vừa đề cập được dùng khi bạn muốn thay đổi giá trị của một nhãn đặc biệt. Trong đoạn mã ví dụ, thuộc tính city của người dùng sẽ được thay đổi. Để lưu tất cả các thay đổi mà bạn đã thực hiện trên cấu trúc ElementTree, hãy dùng phương thức write().

Working...
X