Come lavorare con l'elaborazione XML in .NET
I file XLSX memorizzano i loro dati in parti XML all’interno di un pacchetto OPC ZIP. Aspose.Cells FOSS per .NET elabora questi tramite quattro classi mapper XML: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper e StylesheetXmlMapper. Comprendere queste classi ti aiuta a diagnosticare i fallimenti di parsing e a configurare correttamente il caricamento tollerante ai guasti. Installa con dotnet add package Aspose.Cells_FOSS.
Guida passo-passo
Passo 1: Installa il pacchetto
dotnet add package Aspose.Cells_FOSSPasso 2: Importa lo spazio dei nomi
using Aspose.Cells_FOSS;Passo 3: Comprendere le responsabilità del mapper XML
Ogni mapper gestisce una parte XML della struttura XLSX:
| Mappatore | Parte XML | Gestisce |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Metadati della cartella di lavoro, elenco dei fogli, nomi definiti |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Dati delle celle, formule, collegamenti ipertestuali, convalide, formati condizionali |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Valori di stringa de‑duplicati |
StylesheetXmlMapper | xl/styles.xml | Stili delle celle, caratteri, riempimenti, bordi |
Questi mapper vengono invocati automaticamente durante la costruzione Workbook e Save(). Non li istanzi direttamente nel codice dell’applicazione.
Passo 4: Gestire XmlParsingException
XmlParsingException viene lanciato quando un mapper incontra XML malformato che non può essere riparato. Abilita TryRepairXml = true in LoadOptions per attivare il percorso di parsing tollerante ai guasti del 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);
}Passo 5: Usa LoadDiagnostics per identificare i problemi XML
Dopo un caricamento riuscito, controlla LoadDiagnostics.Issues per i record DiagnosticEntry per capire quali riparazioni XML sono state applicate e se qualcuna ha provocato perdita di dati.
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}");
}Problemi comuni e soluzioni
XmlParsingException anche con TryRepairXml = true.
L’XML è così malformato che il parser tollerante agli errori non può recuperarlo. Questo può accadere con file creati da strumenti non standard che producono XML sintatticamente non valido. Non esiste alcun percorso di recupero per questi file.
Gli stili mancano dopo il caricamento.
Il StylesheetXmlMapper potrebbe aver incontrato un xl/styles.xml corrotto. Controlla LoadDiagnostics.Issues per le voci con codice relativo agli stili e DataLossRisk = true per le celle interessate.
Le stringhe condivise appaiono come celle vuote.
Una xl/sharedStrings.xml corrotta può causare che le celle che fanno riferimento alla tabella delle stringhe condivise vengano visualizzate come vuote. Abilita TryRepairXml per tentare il recupero.
Domande frequenti
Posso implementare un mapper XML personalizzato?
No. Le classi mapper XML sono infrastrutture interne sigillate e non sono progettate per l’estensione.
Perché il SharedStringTableXmlMapper è separato?
La specifica OOXML separa i valori di stringa ripetuti in una tabella di stringhe condivise per ridurre la dimensione del file. Il mapper gestisce la lettura e la scrittura di questa tabella in modo indipendente dai dati delle celle.
Corregge TryRepairXml tutti i problemi di parsing XML?
TryRepairXml gestisce errori recuperabili come elementi non chiusi, spazi dei nomi mancanti e valori di attributi troncati. XML strutturalmente valido ma semanticamente incoerente (ad es. token di formula che fanno riferimento a celle non esistenti) verrà comunque analizzato senza errori.