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

  • Bài 3/4: XML

    XML Dành Cho DevOps: Từ Gốc Đến Ngọn Và Cách “Bẻ” Nó Trong Python 🧠
    📌 Bạn đã từng nghĩ XML là "thứ gì đó cồng kềnh khó chịu"? Nhưng bạn sẽ phải suy nghĩ lại nếu làm việc với API cũ, cấu hình mạng legacy, hoặc các hệ thống enterprise khổng lồ trong tự động hóa mạng. Đây là bài viết dành cho DevOps, NetDev, Automation Engineer muốn “làm chủ” XML từ A-Z theo phong cách Pythonic.

    🔎 XML KHÔNG PHẢI HTML!

    Cả hai cùng dùng thẻ <tag> trông có vẻ giống nhau, nhưng HTML là để hiển thị còn XML là để mô tả dữ liệu.
    • HTML: dùng để trình duyệt hiểu và hiển thị nội dung.
    • XML: dùng để máy móc hiểu và trao đổi dữ liệu có cấu trúc.

    🧬 Ví dụ XML đơn giản:

    <device name="csr1kv1"> <osversion>16.09</osversion> <uptime>2 ngày</uptime> </device>

    XML linh hoạt và có thể định nghĩa bất kỳ cấu trúc nào bạn cần. Nhưng chính vì thế mà bạn có thể gặp xung đột về tên nếu không dùng… namespace.
    🧭 Namespace trong XML – Giải pháp chống xung đột

    Giả sử bạn có 2 nhóm dữ liệu từ Cisco và Dell cùng dùng phần tử <inventory>. Sẽ ra sao khi bạn parse tệp này?
    ✅ Cách đúng: Dùng namespace!

    <inventory xmlns="https://www.cisco.com/ns/routers"> ... </inventory> <inventory xmlns="https://www.dell.com/ns/servers"> ... </inventory>

    👉 Hoặc dùng tiền tố (prefix) như sau:

    <prod:device xmlns:prod="https://www.cisco.com/ns/routers/prod">
    🐍 Làm Việc Với XML Trong Python

    Bước 1: Dùng xml.etree.ElementTree

    import xml.etree.ElementTree as ET tree = ET.parse("inventory.xml") root = tree.getroot()

    Bước 2: Lặp qua các phần tử có namespace

    for device in root.findall("{https://www.cisco.com/ns/routers/prod}device"): print(device.attrib['name'])

    Bước 3: Trích xuất serial


    for serial in root.iter("{https://www.cisco.com/ns/routers/prod}serial"): print(serial.text)
    🔁 Chuyển XML sang JSON Dễ Dàng

    Dùng thư viện xmltodict và json:

    import xmltodict, json
    with open('inventory.xml') as xml_file: data = xmltodict.parse(xml_file.read(), attr_prefix='') # Bỏ @
    print(json.dumps(data, indent=4))

    ✨ Kết quả: JSON sạch đẹp, dễ dùng như Python dict.
    🧠 Câu hỏi ôn tập cuối bài

    Hỏi: Tùy chọn nào sau đây là namespace hợp lệ?
    ✅ xmlns="https://www.cisco.com/ns/devices"
    Hỏi: Tại sao dùng XML namespace?
    ✅ Để tránh xung đột tên phần tử trong cùng một tài liệu XML.
    🔚 Kết luận

    Trong thế giới Automation, đừng xem nhẹ XML chỉ vì JSON "dễ hơn". Khi bạn đụng đến:
    • YANG model
    • NETCONF API
    • Data center provisioning
    👉 XML chính là người bạn thân thiết nhưng "có cá tính". Hãy nắm bắt nó đúng cách bằng Python!
    💬 Bạn đã từng "vật lộn" với XML và namespace chưa? Comment chia sẻ trải nghiệm hoặc hỏi bất kỳ thắc mắc nào bên dưới!
    🔁 Chia sẻ nếu bạn thấy hữu ích cho cộng đồng DevOps Việt!
    #NetDevOps vnpro xml #PythonAutomation #CiscoAPI #NetworkAutomation #ConfigModeling #xmltodict #ElementTree devnet #TựĐộngHóaMạng #APIWorkshop
    Attached Files
    Last edited by dangquangminh; 24-06-2025, 09:29 AM.
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X