XML: nó là gì, cấu trúc tài liệu và nguyên lý hoạt động

Tác giả: IT Sectr Đã đăng: 2026-03-08 Thời gian đọc: 8 phút

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 — ngôn ngữ đánh dấu mở rộng với các thẻ tùy chỉnh cho dữ liệu có cấu trúc
  • Cấu trúc chặt chẽ — thẻ đóng bắt buộc, phần tử gốc và xác thực qua XSD
  • Không gian tên — cơ chế tránh xung đột tên trong một tài liệu
  • XSLT — chuyển đổi XML sang các định dạng khác: HTML, PDF, CSV
  • Phát triển Android — XML được sử dụng cho bố cục, tệp kê khai và tài nguyên

XML là gì?

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ác lĩnh vực ứng dụng chính của XML

  • Phát triển Android — tệp bố cục, tệp kê khai, tài nguyên (strings, colors, themes)
  • Cấu hình — Maven POM, Ant build, cấu hình web (web.xml)
  • Dịch vụ web — SOAP, XML-RPC, nguồn cấp RSS/Atom
  • Luồng tài liệu — SVG, DocBook, Office Open XML
  • Cơ sở dữ liệu — SQL Server (kiểu XML), Oracle, PostgreSQL

Cú pháp và cấu trúc XML

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
<?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>

Các quy tắc XML được hình thành tốt

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.

  1. Một phần tử gốc — tài liệu chứa chính xác một gốc
  2. Lồng nhau chính xác — các thẻ không được chồng chéo
  3. Thẻ đóng — bắt buộc cho tất cả các phần tử trừ thẻ tự đóng
  4. Phân biệt chữ hoa/thường — <Book> và <book> là các phần tử khác nhau
  5. Dấu ngoặc kép trong thuộc tính — giá trị thuộc tính trong dấu ngoặc kép đơn hoặc kép

Không gian tên và lược đồ XML

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 trong phát triển di động

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ã.

Ví dụ bố cục Android

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
<?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

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.

Phân tích cú pháp XML trên Android (Kotlin)

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.

kotlin
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ụ XML trong ứng dụng

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.

Cấu hình Maven (POM)

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
<?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>

XML so với JSON: khi nào chọn cái gì

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 khác HTML như thế nào?

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 là gì và tại sao cần nó?

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.

Làm thế nào để phân tích cú pháp XML trên Android?

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.

Sự khác biệt giữa DTD và XSD là gì?

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ó.

Tại sao cần không gian tên trong XML?

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

  • XML — ngôn ngữ đánh dấu mở rộng với các thẻ tùy chỉnh cho dữ liệu có cấu trúc
  • Cú pháp chặt chẽ — thẻ đóng bắt buộc, phần tử gốc, phân biệt chữ hoa/thường
  • Không gian tên và lược đồ XSD cung cấp xác thực và ngăn xung đột tên
  • Android sử dụng XML cho giao diện, tài nguyên và cấu hình ứng dụng
  • Phân tích cú pháp thực hiện qua XmlPullParser (luồng) hoặc DOM (trong bộ nhớ)
  • XSLT cho phép chuyển đổi XML sang HTML, PDF và các định dạng khác
  • Ít phổ biến hơn trong REST API so với JSON, nhưng XML không thể thay thế trong Enterprise và Android

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.

Thảo luận dự án

Đọc thêm