Πώς να εργαστείτε με την επεξεργασία 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Βήμα 2: Εισαγωγή του χώρου ονομάτων
using Aspose.Cells_FOSS;Βήμα 3: Κατανόηση των ευθυνών του XML Mapper
Κάθε mapper διαχειρίζεται ένα τμήμα XML της δομής XLSX:
| Mapper | XML Part | Handles |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Μεταδεδομένα βιβλίου εργασίας, λίστα φύλλων, ορισμένα ονόματα |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Δεδομένα κελιών, τύποι, υπερσυνδέσεις, επικυρώσεις, μορφοποιήσεις υπό όρους |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Απο-διπλοτυπία τιμών συμβολοσειρών |
StylesheetXmlMapper | xl/styles.xml | Στυλ κελιών, γραμματοσειρές, γεμίσματα, περιγράμματα |
Αυτοί οι mappers ενεργοποιούνται αυτόματα κατά τη διάρκεια της κατασκευής Workbook και Save(). Δεν τους instantiate απευθείας στον κώδικα της εφαρμογής.
Βήμα 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 mapper;
Όχι. Οι κλάσεις χαρτογράφησης XML είναι κλειστές εσωτερικές υποδομές και δεν έχουν σχεδιαστεί για επέκταση.
Γιατί είναι το SharedStringTableXmlMapper ξεχωριστό;
Η προδιαγραφή OOXML διαχωρίζει τις επαναλαμβανόμενες τιμές συμβολοσειρών σε έναν κοινό πίνακα συμβολοσειρών για να μειώσει το μέγεθος του αρχείου. Ο mapper διαχειρίζεται την ανάγνωση και την εγγραφή αυτού του πίνακα ανεξάρτητα από τα δεδομένα των κελιών.
Το TryRepairXml διορθώνει όλα τα προβλήματα ανάλυσης XML;
TryRepairXml διαχειρίζεται ανακτήσιμα σφάλματα όπως μη κλεισμένα στοιχεία, ελλιπείς χώροι ονομάτων και περικομμένες τιμές χαρακτηριστικών. Δομικά έγκυρο αλλά σημασιολογικά ασυνεπές XML (π.χ. διακριτικά τύπου που αναφέρονται σε μη υπάρχουσες κυψέλες) θα εξακολουθεί να αναλύεται χωρίς σφάλμα.