XML (eXtensible Markup Language) là một định dạng văn bản để lưu trữ và truyền dữ liệu có cấu trúc bằng cách sử dụng các thẻ tùy chỉnh. Nó được sử dụng rộng rãi trong các tệp cấu hình, dịch vụ web và phát triển Android. Theo tổ chức W3C, đặc tả XML vẫn là một tiêu chuẩn ổn định từ năm 2008. XML cung cấp một cấu trúc dữ liệu chặt chẽ với khả năng xác thực thông qua lược đồ.
Các điểm chính
XML là một ngôn ngữ đánh dấu định nghĩa một tập hợp các quy tắc để mã hóa tài liệu trong định dạng mà cả con người và máy móc đều có thể đọc được. Không giống HTML, XML không có tập hợp thẻ cố định — các nhà phát triển tạo các thẻ của riêng họ tương ứng với cấu trúc dữ liệu.
XML được phát triển bởi tổ chức W3C vào năm 1996 như một tập con đơn giản hóa của SGML (Standard Generalized Markup Language). Mục tiêu chính của XML là tách biệt nội dung khỏi trình bày dữ liệu. Không giống HTML mô tả hình thức bên ngoài, XML mô tả cấu trúc và ý nghĩa của dữ liệu.
Đặc tính chính của XML là tính mở rộng. Nếu các loại dữ liệu mới xuất hiện trong một dự án, nhà phát triển chỉ cần thêm các thẻ mới mà không thay đổi cấu trúc hiện có. Điều này làm cho XML thuận tiện cho việc lưu trữ dữ liệu dài hạn và trao đổi giữa các hệ thống khác nhau.
Cú pháp XML chặt chẽ hơn HTML. Mỗi thẻ mở phải có thẻ đóng tương ứng, các thuộc tính được đặt trong dấu ngoặc kép và tên thẻ phân biệt chữ hoa và chữ thường. Tài liệu phải có chính xác một phần tử gốc chứa tất cả các phần tử khác.
Một tài liệu XML có thể bắt đầu bằng một khai báo chỉ định phiên bản XML và mã hóa. Tiếp theo là phần tử gốc, bên trong có thể chứa các phần tử lồng nhau, thuộc tính, nội dung văn bản và chú thích. Các phần tử rỗng được viết dưới dạng <element />.
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk001">
<title>XML Developer Guide</title>
<author>John Smith</author>
<price currency="USD">29.99</price>
<published>2026-03-15</published>
</book>
<book id="bk002">
<title>Advanced XML Schemas</title>
<author>Jane Doe</author>
<price currency="USD">49.99</price>
</book>
</catalog>
XML được hình thành tốt (Well-formed XML) phải tuân theo các quy tắc cơ bản: thẻ đóng là bắt buộc cho mỗi thẻ mở, việc lồng nhau chặt chẽ (không được phép chồng chéo thẻ), giá trị thuộc tính luôn trong dấu ngoặc kép. Vi phạm bất kỳ quy tắc nào làm cho tài liệu không hợp lệ và không thể phân tích cú pháp được.
Không gian tên XML giải quyết vấn đề xung đột tên khi các phần tử từ các từ điển khác nhau được sử dụng trong một tài liệu. Một không gian tên được xác định bởi thuộc tính xmlns với một URI xác định duy nhất từ điển.
XML Schema (XSD) là một ngôn ngữ để mô tả cấu trúc của một tài liệu XML. XSD xác định phần tử và thuộc tính nào được phép, kiểu dữ liệu của chúng, tính bắt buộc và các ràng buộc. Lược đồ cho phép xác thực tự động tài liệu trước khi xử lý, điều này rất quan trọng đối với các giải pháp tích hợp.
| Công nghệ | Mục đích | Ví dụ |
|---|---|---|
| DTD | Xác thực cấu trúc cơ bản | Cũ hơn, ít khả năng hơn |
| XSD | Phân loại chặt chẽ và xác thực | Tiêu chuẩn công nghiệp |
| RELAX NG | Thay thế nhỏ gọn cho XSD | Đơn giản và dễ đọc hơn XSD |
| XSLT | Chuyển đổi XML sang các định dạng khác | XML sang HTML, PDF, CSV |
| XPath | Điều hướng và chọn nút | Truy vấn cây XML |
XML đóng vai trò quan trọng trong phát triển Android. Hệ điều hành Android sử dụng XML để mô tả giao diện người dùng (tệp bố cục), cấu hình ứng dụng (AndroidManifest.xml), tài nguyên (strings, colors, themes) và đồ họa vector (VectorDrawable). Trên iOS, XML ít được sử dụng hơn, chủ yếu cho Storyboard và tệp cấu hình plist.
Trong Android, mỗi màn hình ứng dụng được mô tả bằng một tệp XML với hệ thống phân cấp các thành phần View: ConstraintLayout, LinearLayout, TextView, Button. Cách tiếp cận này tách biệt logic ứng dụng khỏi trình bày, đơn giản hóa việc bảo trì và thích ứng với các màn hình khác nhau. Các tệp XML tài nguyên cho phép bản địa hóa ứng dụng mà không thay đổi mã.
Một tệp bố cục điển hình chứa ConstraintLayout gốc với các phần tử lồng nhau, mỗi phần tử có các thuộc tính về vị trí, kích thước và kiểu dáng. Android biên dịch XML sang định dạng nhị phân AXML để tối ưu hóa hiệu suất khi khởi động.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/welcome"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/click"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Phân tích cú pháp XML trên nền tảng di động được thực hiện bằng hai cách tiếp cận chính: DOM (Document Object Model) tải toàn bộ tài liệu vào bộ nhớ dưới dạng cây, SAX (Simple API for XML) đọc tài liệu theo luồng, gọi các trình xử lý sự kiện. DOM thuận tiện cho tài liệu nhỏ, SAX cho tệp lớn với giới hạn bộ nhớ.
Android có trình phân tích tích hợp sẵn: XmlPullParser cho phân tích luồng và DocumentBuilder cho cách tiếp cận DOM. iOS sử dụng Foundation XMLParser với giao thức ủy quyền. Để tuần tự hóa các đối tượng sang XML, các thư viện như SimpleXML trong PHP hoặc Jackson XML trong Java thường được sử dụng.
Android khuyến nghị sử dụng XmlPullParser để phân tích cú pháp XML hiệu quả. Trình phân tích hoạt động ở chế độ hướng sự kiện: nó gọi next() để di chuyển đến phần tử tiếp theo và trả về loại sự kiện (START_TAG, TEXT, END_TAG). Điều này cho phép xử lý các tài liệu có kích thước bất kỳ với mức tiêu thụ bộ nhớ tối thiểu.
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import java.io.IOException
fun parseCatalog(parser: XmlPullParser): List<Book> {
val books = mutableListOf<Book>()
var eventType = parser.getEventType()
var currentBook: Book? = null
while (eventType != XmlPullParser.END_DOCUMENT) {
when (eventType) {
XmlPullParser.START_TAG -> {
when (parser.getName()) {
"book" -> currentBook = Book()
"title" -> parser.next()
"author" -> parser.next()
}
}
XmlPullParser.TEXT -> {
currentBook?.apply {
title = parser.getText() ?: ""
}
}
XmlPullParser.END_TAG -> {
if (parser.getName() == "book") {
currentBook?.let { books.add(it) }
}
}
}
eventType = parser.next()
}
return books
}
Ví dụ sử dụng XML cho thấy vai trò của nó trong các dự án thực tế. Ngoài phát triển Android, XML còn được sử dụng cho cấu hình xây dựng, mô tả dữ liệu và luồng tài liệu. Hiểu cú pháp XML là cần thiết để làm việc với Maven, dịch vụ SOAP và nhiều công cụ doanh nghiệp.
Tệp pom.xml mô tả một dự án Maven: các phụ thuộc, plugin, phiên bản và hồ sơ xây dựng. Mỗi phụ thuộc được chỉ định bằng các thẻ groupId, artifactId và version. Maven tự động tải xuống các thư viện được chỉ định từ các kho lưu trữ.
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</project>
Sự lựa chọn giữa XML và JSON phụ thuộc vào các yêu cầu cụ thể của dự án. JSON phù hợp cho REST API, ứng dụng di động và cấu hình nơi mà sự nhỏ gọn và tốc độ là quan trọng. XML không thể thay thế trong các hệ thống doanh nghiệp, luồng tài liệu và phát triển Android, nơi cần xác thực chặt chẽ, không gian tên và chuyển đổi dữ liệu.
XML chiến thắng trong các kịch bản lưu trữ tài liệu dài hạn. Nhờ lược đồ XSD, các tài liệu XML có thể được xác thực tự động, điều này rất quan trọng đối với các hệ thống y tế, tài chính và pháp lý. Các chuyển đổi XSLT cho phép tạo HTML, PDF và các định dạng khác từ một nguồn XML duy nhất, đơn giản hóa luồng tài liệu.
JSON, đến lượt nó, đã trở thành tiêu chuẩn cho các API web và ứng dụng di động. Dễ dàng tích hợp với JavaScript, kích thước nhỏ hơn và tốc độ phân tích cú pháp cao làm cho JSON trở thành lựa chọn ưu tiên cho REST API, thông báo WebSocket và tệp cấu hình. Đối với hầu hết các dự án mới, nên bắt đầu với JSON và chuyển sang XML chỉ khi các yêu cầu cụ thể xuất hiện.
Câu hỏi thường gặp
XML mô tả cấu trúc và nội dung của dữ liệu, HTML mô tả hình thức bên ngoài và trình bày. XML cho phép tạo bất kỳ thẻ nào, HTML có tập hợp cố định. XML chặt chẽ hơn về cú pháp: tất cả các thẻ phải được đóng, HTML cho phép thẻ không đóng. XML dành cho dữ liệu, HTML dành cho hiển thị.
XSD (XML Schema Definition) là ngôn ngữ mô tả cấu trúc của một tài liệu XML. XSD xác định phần tử và thuộc tính nào được phép, kiểu dữ liệu, tính bắt buộc và các ràng buộc của chúng. Lược đồ cho phép xác thực tự động một tài liệu XML trước khi xử lý, ngăn ngừa lỗi và đảm bảo tính toàn vẹn dữ liệu.
Trên Android, sử dụng XmlPullParser để phân tích cú pháp XML — một trình phân tích luồng tích hợp sẵn. Nó hoạt động theo hướng sự kiện: xử lý START_TAG, TEXT và END_TAG trong một vòng lặp, quản lý bộ nhớ hiệu quả. Đối với tài liệu nhỏ, trình phân tích DOM thông qua DocumentBuilderFactory phù hợp, tải toàn bộ tài liệu vào bộ nhớ dưới dạng cây nút.
DTD (Document Type Definition) là cơ chế xác thực cũ với khả năng hạn chế: nó không hỗ trợ kiểu dữ liệu (mọi thứ là chuỗi) và không gian tên. XSD là sự thay thế hiện đại với hỗ trợ kiểu dữ liệu (số, ngày, liệt kê), không gian tên và tính mở rộng. Bản thân XSD là một tài liệu XML, trong khi DTD sử dụng cú pháp riêng của nó.
Không gian tên ngăn chặn xung đột tên khi một tài liệu XML kết hợp các phần tử từ nhiều nguồn khác nhau. Ví dụ, trong bố cục Android, thẻ View có thể đến từ cả android.view và một thư viện. Thuộc tính xmlns với một URI xác định duy nhất nguồn gốc của mỗi phần tử và thuộc tính.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm