Cách làm việc với Xử lý XML trong .NET

Cách làm việc với Xử lý XML trong .NET

Các tệp XLSX lưu trữ dữ liệu của chúng trong các phần XML bên trong gói OPC ZIP. Aspose.Cells FOSS cho .NET xử lý chúng thông qua bốn lớp ánh xạ XML: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, và StylesheetXmlMapper. Hiểu các lớp này giúp bạn chẩn đoán các lỗi phân tích và cấu hình đúng cách việc tải chịu lỗi. Cài đặt bằng dotnet add package Aspose.Cells_FOSS.

Hướng Dẫn Từng Bước

Bước 1: Cài đặt gói

dotnet add package Aspose.Cells_FOSS

Bước 2: Nhập không gian tên

using Aspose.Cells_FOSS;

Bước 3: Hiểu về Trách nhiệm của XML Mapper

Mỗi mapper xử lý một phần XML của cấu trúc XLSX:

Bộ ánh xạPhần XMLXử lý
WorkbookXmlMapperxl/workbook.xmlSiêu dữ liệu Workbook, danh sách sheet, tên đã định nghĩa
WorksheetXmlMapperxl/worksheets/sheetN.xmlDữ liệu ô, công thức, siêu liên kết, xác thực, định dạng có điều kiện
SharedStringTableXmlMapperxl/sharedStrings.xmlGiá trị chuỗi đã loại bỏ trùng lặp
StylesheetXmlMapperxl/styles.xmlKiểu ô, phông chữ, đổ màu, viền

Các mapper này được gọi tự động trong quá trình xây dựng WorkbookSave(). Bạn không khởi tạo chúng trực tiếp trong mã ứng dụng.


Bước 4: Xử lý XmlParsingException

XmlParsingException được ném ra khi một mapper gặp XML sai định dạng không thể sửa chữa. Kích hoạt TryRepairXml = true trong LoadOptions để bật chế độ phân tích cú pháp chịu lỗi của mapper.

using Aspose.Cells_FOSS;

var opts = new LoadOptions
{
    TryRepairPackage = true,
    TryRepairXml = true,
};

try
{
    var wb = new Workbook("malformed.xlsx", opts);
    Console.WriteLine("Loaded: " + wb.Worksheets.Count + " sheet(s)");

    var diag = wb.LoadDiagnostics;
    if (diag.HasRepairs)
        Console.WriteLine("XML repairs applied. Data loss risk: " + diag.HasDataLossRisk);
}
catch (XmlParsingException ex)
{
    Console.WriteLine("Unrecoverable XML error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Load failed: " + ex.Message);
}

Bước 5: Sử dụng LoadDiagnostics để xác định các vấn đề XML

Sau khi tải thành công, kiểm tra LoadDiagnostics.Issues để tìm các bản ghi DiagnosticEntry nhằm hiểu các sửa chữa XML nào đã được áp dụng và liệu có bất kỳ trường hợp nào gây mất dữ liệu hay không.

using Aspose.Cells_FOSS;

var opts = new LoadOptions { TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;

foreach (var entry in diag.Issues)
{
    Console.WriteLine($"[{entry.Severity}] {entry.Code}");
    Console.WriteLine($"  Message: {entry.Message}");
    Console.WriteLine($"  RepairApplied: {entry.RepairApplied}  DataLossRisk: {entry.DataLossRisk}");
}

Các vấn đề thường gặp và cách khắc phục

XmlParsingException ngay cả khi TryRepairXml = true.
XML bị sai dạng đến mức trình phân tích cú pháp chịu lỗi không thể khôi phục được. Điều này có thể xảy ra với các tệp được tạo bởi các công cụ không chuẩn tạo ra XML không hợp lệ về mặt cú pháp. Không có đường phục hồi nào cho những tệp này.

Các kiểu bị thiếu sau khi tải.
StylesheetXmlMapper có thể đã gặp một xl/styles.xml hỏng. Kiểm tra LoadDiagnostics.Issues để tìm các mục có mã liên quan đến kiểu, và DataLossRisk = true cho các ô bị ảnh hưởng.

Chuỗi chia sẻ xuất hiện dưới dạng ô trống.
Một xl/sharedStrings.xml bị hỏng có thể gây ra các ô tham chiếu bảng chuỗi chia sẻ hiển thị trống. Bật TryRepairXml để cố gắng khôi phục.

Câu hỏi thường gặp

Tôi có thể triển khai một bộ ánh xạ XML tùy chỉnh không?

Không. Các lớp XML mapper là hạ tầng nội bộ được đóng kín và không được thiết kế để mở rộng.

Tại sao SharedStringTableXmlMapper tách rời?

Đặc tả OOXML tách các giá trị chuỗi lặp lại thành một bảng chuỗi chia sẻ để giảm kích thước tệp. Bộ ánh xạ xử lý việc đọc và ghi bảng này một cách độc lập so với dữ liệu ô.

TryRepairXml khắc phục tất cả các vấn đề phân tích XML không?

TryRepairXml xử lý các lỗi có thể khôi phục được như các phần tử chưa đóng, thiếu không gian tên và giá trị thuộc tính bị cắt ngắn. XML hợp lệ về cấu trúc nhưng không nhất quán về ngữ nghĩa (ví dụ: các token công thức tham chiếu đến các ô không tồn tại) vẫn sẽ được phân tích mà không có lỗi.

Xem thêm

 Tiếng Việt