Arduino:
Làm việc với XML

Lý do & Mục đích

Làm việc với XML trên Arduino bao gồm việc phân tích và xử lý dữ liệu XML, thường đến từ các API web hoặc các file cấu hình. Lập trình viên thực hiện điều này để tích hợp với các dịch vụ sử dụng XML cho việc trao đổi dữ liệu hoặc để lưu trữ dữ liệu theo một định dạng có cấu trúc, dễ đọc.

Cách thực hiện:

Chúng ta sẽ sử dụng thư viện XMLWriter để tạo XML và thư viện tinyxml2 để phân tích nó. Trước hết, cài đặt các thư viện này thông qua Library Manager trong Arduino IDE của bạn.

Tạo một tài liệu XML:

#include <XMLWriter.h>

void setup() {
  Serial.begin(9600);
  
  XMLWriter xml(&Serial); // Sử dụng Serial để xuất ra
  
  xml.header();
  xml.tag("greeting").tag("text").text("Xin chào, thế giới!").close().close();
  xml.flush();
}

void loop() {
}

Giải mã một chuỗi XML:

#include <tinyxml2.h>

tinyxml2::XMLDocument doc;
doc.Parse("<greeting><text>Xin chào, thế giới!</text></greeting>");

tinyxml2::XMLElement* text = doc.FirstChildElement("greeting")->FirstChildElement("text");
if (text != nullptr) {
  Serial.println(text->GetText());
}

Mẫu xuất ra:

<greeting>
  <text>Xin chào, thế giới!</text>
</greeting>

Sâu hơn nữa

XML, hay Ngôn ngữ Đánh dấu Mở rộng, là một ngôn ngữ đánh dấu định nghĩa một tập các quy tắc để mã hóa tài liệu trong một định dạng vừa dễ đọc vừa có thể xử lý bởi máy. XML đã xuất hiện từ cuối những năm 90 và được sử dụng rộng rãi trong các lĩnh vực khác nhau, đặc biệt là nơi cần trao đổi dữ liệu không phụ thuộc vào nền tảng. Nguyên cớ của việc những nguồn lực bộ nhớ hạn chế trên Arduino khiến việc làm việc với XML khó khăn hơn so với trên PC. Do đó, các thư viện nhẹ là rất quan trọng. Mặc dù JSON đã trở nên phổ biến hơn cho việc trao đổi dữ liệu nhờ cú pháp đơn giản hơn và kích thước nhỏ hơn, XML vẫn được sử dụng rộng rãi, đặc biệt là khi làm việc với các hệ thống cũ hoặc các ứng dụng đòi hỏi việc xác thực tài liệu qua các schema. Chìa khóa cho việc triển khai XML trên Arduino là việc phân tách luồng, đọc tài liệu theo từng phần để giữ cho việc sử dụng bộ nhớ ở mức thấp.

Xem thêm