Cómo trabajar con el procesamiento XML en .NET
Los archivos XLSX almacenan sus datos en partes XML dentro de un paquete OPC ZIP. Aspose.Cells FOSS para .NET procesa estos a través de cuatro clases de mapeo XML: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper y StylesheetXmlMapper. Comprender estas clases le ayuda a diagnosticar fallos de análisis y a configurar correctamente la carga tolerante a fallos. Instale con dotnet add package Aspose.Cells_FOSS.
Guía paso a paso
Paso 1: Instalar el paquete
dotnet add package Aspose.Cells_FOSSPaso 2: Importar el espacio de nombres
using Aspose.Cells_FOSS;Paso 3: Comprender las responsabilidades del mapeador XML
Cada mapeador maneja una parte XML de la estructura XLSX:
| Mapeador | Parte XML | Maneja |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | Metadatos del libro de trabajo, lista de hojas, nombres definidos |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | Datos de celdas, fórmulas, hipervínculos, validaciones, formatos condicionales |
SharedStringTableXmlMapper | xl/sharedStrings.xml | Valores de cadena desduplicados |
StylesheetXmlMapper | xl/styles.xml | Estilos de celda, fuentes, rellenos, bordes |
Estos mapeadores se invocan automáticamente durante la construcción Workbook y Save(). No los instancias directamente en el código de la aplicación.
Paso 4: Manejar XmlParsingException
XmlParsingException se lanza cuando un mapeador encuentra XML malformado que no puede repararse. Habilite TryRepairXml = true en LoadOptions para activar la ruta de análisis tolerante a fallos del mapeador.
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);
}Paso 5: Utilice LoadDiagnostics para identificar problemas XML
Después de una carga exitosa, verifique LoadDiagnostics.Issues para los registros DiagnosticEntry para entender qué reparaciones XML se aplicaron y si alguna resultó en pérdida de datos.
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}");
}Problemas comunes y soluciones
XmlParsingException incluso con TryRepairXml = true.
El XML está tan malformado que el analizador tolerante a fallos no puede recuperarlo. Esto puede ocurrir con archivos creados por herramientas no estándar que producen XML sintácticamente inválido. No hay una ruta de recuperación para estos archivos.
Los estilos faltan después de cargar.
El StylesheetXmlMapper puede haber encontrado un xl/styles.xml corrupto. Verifique LoadDiagnostics.Issues para entradas con código relacionado con estilos, y DataLossRisk = true para celdas afectadas.
Las cadenas compartidas aparecen como celdas vacías.
Un xl/sharedStrings.xml corrupto puede causar que las celdas que hacen referencia a la tabla de cadenas compartidas se muestren vacías. Habilite TryRepairXml para intentar la recuperación.
Preguntas Frecuentes
¿Puedo implementar un mapeador XML personalizado?
No. Las clases de mapeador XML son infraestructura interna sellada y no están diseñadas para su extensión.
¿Por qué está el SharedStringTableXmlMapper separado?
La especificación OOXML separa los valores de cadena repetidos en una tabla de cadenas compartidas para reducir el tamaño del archivo. El mapeador maneja la lectura y escritura de esta tabla de forma independiente de los datos de la celda.
¿TryRepairXml corrige todos los problemas de análisis XML?
TryRepairXml maneja errores recuperables como elementos no cerrados, espacios de nombres faltantes y valores de atributo truncados. XML estructuralmente válido pero semánticamente inconsistente (p. ej., tokens de fórmula que hacen referencia a celdas inexistentes) seguirá analizando sin error.