Come lavorare con l'elaborazione XML in .NET

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_FOSS

Passo 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:

MappatoreParte XMLGestisce
WorkbookXmlMapperxl/workbook.xmlMetadati della cartella di lavoro, elenco dei fogli, nomi definiti
WorksheetXmlMapperxl/worksheets/sheetN.xmlDati delle celle, formule, collegamenti ipertestuali, convalide, formati condizionali
SharedStringTableXmlMapperxl/sharedStrings.xmlValori di stringa de‑duplicati
StylesheetXmlMapperxl/styles.xmlStili 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.

Vedi anche

 Italiano