כיצד לעבוד עם עיבוד XML ב‑.NET
קבצי XLSX מאחסנים את הנתונים שלהם בחלקי XML בתוך חבילת OPC ZIP. Aspose.Cells FOSS for .NET מעבד אותם דרך ארבע מחלקות ממפה של XML: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, ו-StylesheetXmlMapper. הבנת מחלקות אלו מסייעת לאבחן כשלי ניתוח ולהגדיר בצורה נכונה טעינה עמידה לתקלות. התקן עם dotnet add package Aspose.Cells_FOSS.
מדריך שלב אחר שלב
שלב 1: התקנת החבילה
dotnet add package Aspose.Cells_FOSSשלב 2: ייבא את מרחב השמות
using Aspose.Cells_FOSS;שלב 3: הבנת תחומי האחריות של ממפה XML
כל ממפה מטפלת בחלק XML אחד של מבנה ה‑XLSX:
| מתאם | חלק XML | מטפל ב |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | נתוני על של חוברת עבודה, רשימת גיליונות, שמות מוגדרים |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | נתוני תאים, נוסחאות, קישורים, אימותים, פורמטים מותנים |
SharedStringTableXmlMapper | xl/sharedStrings.xml | ערכי מחרוזות ללא כפילויות |
StylesheetXmlMapper | xl/styles.xml | סגנונות תאים, גופנים, מילויים, גבולות |
ממפים אלה מופעלים אוטומטית במהלך בניית Workbook וSave(). אינך יוצר מופעים שלהם ישירות בקוד היישום.
שלב 4: טיפול ב‑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 תקין מבחינה מבנית אך לא עקבי מבחינה סמנטית (למשל אסימוני נוסחה המתייחסים לתאים שאינם קיימים) עדיין יעבור ניתוח ללא שגיאה.