نحوه کار با پردازش XML در .NET
فایلهای XLSX دادههای خود را در بخشهای XML داخل یک بسته OPC ZIP ذخیره میکنند. Aspose.Cells FOSS برای .NET اینها را از طریق چهار کلاس مپگر XML پردازش میکند: WorkbookXmlMapper، WorksheetXmlMapper، SharedStringTableXmlMapper، و StylesheetXmlMapper. درک این کلاسها به شما کمک میکند تا خطاهای تجزیه را تشخیص داده و بارگذاری مقاوم به خطا را بهدرستی پیکربندی کنید. نصب با dotnet add package Aspose.Cells_FOSS.
راهنمای گام به گام
مرحله 1: نصب بسته
dotnet add package Aspose.Cells_FOSSمرحله ۲: وارد کردن فضای نام
using Aspose.Cells_FOSS;مرحله ۳: مسئولیتهای XML Mapper را درک کنید
هر مپر یک بخش XML از ساختار XLSX را مدیریت میکند:
| Mapper | XML Part | Handles |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | متادیتای کتاب کار، فهرست شیتها، نامهای تعریفشده |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | دادههای سلول، فرمولها، پیوندهای ابرمتنی، اعتبارسنجیها، قالبهای شرطی |
SharedStringTableXmlMapper | xl/sharedStrings.xml | مقادیر رشتهای حذف تکرار |
StylesheetXmlMapper | xl/styles.xml | استایلهای سلول، قلمها، پرکنندهها، حاشیهها |
این مپِرها بهصورت خودکار در طول ساخت Workbook و Save() فراخوانی میشوند. شما آنها را بهصورت مستقیم در کد برنامه ایجاد نمیکنید.
مرحله ۴: مدیریت XmlParsingException
XmlParsingException زمانی پرتاب میشود که یک مپر با XML خراب مواجه شود که قابل تعمیر نیست. TryRepairXml = true را در LoadOptions فعال کنید تا مسیر تجزیهوتحلیل مقاوم به خطای مپر فعال شود.
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);
}مرحله 5: استفاده از LoadDiagnostics برای شناسایی مشکلات XML
پس از بارگذاری موفق، LoadDiagnostics.Issues را برای رکوردهای DiagnosticEntry بررسی کنید تا بفهمید کدام تعمیرات XML اعمال شدهاند و آیا هیچکدام منجر به از دست رفتن دادهها شدهاند.
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}");
}مشکلات رایج و راهحلها
XmlParsingException حتی با TryRepairXml = true.
XML بهقدری خراب است که تجزیهکننده مقاوم به خطا نمیتواند آن را بازیابی کند. این میتواند با فایلهایی که توسط ابزارهای غیر استاندارد ایجاد شدهاند و XML نامعتبر نحوی تولید میکنند، رخ دهد. برای این فایلها مسیر بازیابی وجود ندارد.
پس از بارگذاری، سبکها گم شدهاند.StylesheetXmlMapper ممکن است با یک xl/styles.xml خراب مواجه شده باشد. برای ورودیهای حاوی کد مرتبط با سبکها، LoadDiagnostics.Issues را بررسی کنید و برای سلولهای تحت تأثیر، DataLossRisk = true را بررسی کنید.
رشتههای مشترک بهصورت سلولهای خالی ظاهر میشوند.
یک xl/sharedStrings.xml خراب میتواند باعث شود سلولهایی که به جدول رشتههای مشترک ارجاع میدهند بهصورت خالی نمایش داده شوند. TryRepairXml را فعال کنید تا بازیابی سعی شود.
سوالات متداول
آیا میتوانم یک مپر XML سفارشی پیادهسازی کنم؟
نه. کلاسهای مپِر XML زیرساخت داخلی مهر و موم شدهاند و برای گسترش طراحی نشدهاند.
چرا SharedStringTableXmlMapper جداست؟
مشخصات OOXML مقادیر رشتهای تکراری را به یک جدول رشتههای مشترک تقسیم میکند تا حجم فایل کاهش یابد. مپر عملیات خواندن و نوشتن این جدول را بهصورت مستقل از دادههای سلول انجام میدهد.
آیا TryRepairXml تمام مشکلات تجزیه XML را برطرف میکند؟
TryRepairXml خطاهای قابل بازیابی مانند عناصر بازنشده، فضاینامهای گمشده و مقادیر ویژگیهای ناقص را مدیریت میکند. XMLی که از نظر ساختاری معتبر است اما از نظر معنایی ناسازگار است (مثلاً توکنهای فرمول که به سلولهای غیرموجود ارجاع میدهند) همچنان بدون خطا تجزیه میشود.