کار با پردازش XML
کار با پردازش XML
فایلهای XLSX دادههای خود را در بخشهای XML داخل یک بسته OPC ذخیره میکنند. Aspose.Cells نرمافزار متن باز برای .NET لایهٔ تجزیه و سریالسازی XML را از طریق چهار کلاس مپر: WorkbookXmlMapper، WorksheetXmlMapper، SharedStringTableXmlMapper و StylesheetXmlMapper ارائه میدهد. هر مپر هر دو عملیات Read و Write را برای بخش مربوط به XML خود پیادهسازی میکند. اینها APIهای زیرساخت داخلی هستند — بیشتر کدهای برنامهای کاملاً از طریق اشیاء Workbook و Worksheet کار میکنند.
کلاسهای مپر XML
هر مپر XML مسئول یک بخش XML از ساختار XLSX است:
| Mapper | XML بخش | Responsibility |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | متادیتا سطح کتابکار، ارجاعهای شیت، نامهای تعریفشده |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | دادههای سلول، فرمولها، پیوندها، قالبهای شرطی، اعتبارسنجی داده |
SharedStringTableXmlMapper | xl/sharedStrings.xml | جدول رشتههای مشترک برای مقادیر رشتهای حذف تکراری |
StylesheetXmlMapper | xl/styles.xml | سبکهای سلول، قلمها، پرکنندهها، حاشیهها، قالبهای عددی |
هر مپر دو متد — Read و Write — را افشا میکند که بهطور متناوب توسط خطوط لولهٔ بارگذاری و ذخیرهٔ کتابخانه فراخوانی میشوند.
XmlParsingException
XmlParsingException زمانی پرتاب میشود که یک مپر به XML خرابسازی شدهای بر میخورد که قابل تعمیر نیست. این استثنا پیش از WorkbookLoadException در سلسلهمراتب خطاها بالا میآید وقتی که شکست بهطور خاص هنگام تجزیه XML رخ میدهد.
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)");
}
catch (XmlParsingException ex)
{
Console.WriteLine("XML parse error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}نکات و بهترین شیوهها
- مقدار
TryRepairXml = trueرا درLoadOptionsتنظیم کنید تا مسیر تجزیهگر مقاوم به خطا فعال شود. - در هنگام کار با فایلهای سیستمهای خارجی که ممکن است XML نامعتبر تولید کنند، علاوه بر
WorkbookLoadException،XmlParsingExceptionرا نیز بگیرید. - کلاسهای مپپر XML برای ساختن توسط کد برنامهنویسی در نظر گرفته نشدهاند — آنها بهصورت خودکار در طول ساخت
WorkbookوSave()فراخوانی میشوند. - اگر برای عیبیابی نیاز به بررسی محتوای خام XML دارید، فایل XLSX را بهعنوان ZIP استخراج کنید و بخشهای مربوط به XML را بهطور مستقیم بررسی کنید.
مشکلات متداول
| مشکل | دلیل | راهحل |
|---|---|---|
XmlParsingException هنگام بارگذاری | XML نامعتبر در یکی از بخشهای XLSX | مقدار TryRepairXml = true را در LoadOptions تنظیم کنید |
| سبکها پس از round-trip موجود نیستند | StylesheetXmlMapper نتوانست رکورد سبک سفارشی را تجزیه کند | LoadDiagnostics.Issues را برای ورودیهای تعمیر مرتبط با سبک بررسی کنید |
| رشتههای بهاشتراکگذاریشده در پرونده بارگذاریشده موجود نیستند | SharedStringTableXmlMapper با جدول رشتههای بهاشتراکگذاریشده خراب مواجه شد | TryRepairXml را فعال کنید؛ اطمینان حاصل کنید که فایل اصلی دارای xl/sharedStrings.xml معتبر است |
FAQ
آیا میتوانم مپپر XML خودم را پیادهسازی کنم؟
کلاسهای مپر XML زیرساخت داخلی بستهای هستند. مپرهای سفارشی در سطح API فعلی پشتیبانی نمیشوند.
چرا یک SharedStringTableXmlMapper جداگانه وجود دارد؟
مشخصات OOXML مقادیر رشتهای را به یک جدول رشتههای مشترک (xl/sharedStrings.xml) تقسیم میکند تا رشتههای تکراری در سراسر کتابکار حذف تکرار شوند. مپر خواندن و نوشتن این جدول را به صورت مستقل مدیریت میکند.
آیا TryRepairXml = true تمام مشکلات XML را رفع میکند؟
TryRepairXml مشکلات قابل بازیابی مانند عناصر بازنشده، فضاینامهای گمشده و مقادیر قطعشده را مدیریت میکند. XML هایی که از نظر ساختاری معتبر هستند اما از نظر معنایی ناسازگار (مثلاً ارجاعات فرمول خراب) ممکن است هنوز باعث XmlParsingException شوند.
API Reference خلاصه
| کلاس | شرح |
|---|---|
WorkbookXmlMapper | xl/workbook.xml را میخواند/مینویسد |
WorksheetXmlMapper | خواندن/نوشتن برای هر شیت XML قطعات |
SharedStringTableXmlMapper | خواندن/نوشتن xl/sharedStrings.xml |
StylesheetXmlMapper | خواندن/نوشتن xl/styles.xml |
XmlParsingException | در خطاهای تجزیه XML غیرقابل بازیابی پرتاب میشود |