Como Trabalhar com Processamento XML no .NET

Como Trabalhar com Processamento XML no .NET

Arquivos XLSX armazenam seus dados em partes XML dentro de um pacote OPC ZIP. Aspose.Cells FOSS for .NET processa esses dados por meio de quatro classes de mapeamento XML: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper e StylesheetXmlMapper. Compreender essas classes ajuda a diagnosticar falhas de análise e a configurar corretamente o carregamento tolerante a falhas. Instale com dotnet add package Aspose.Cells_FOSS.

Guia passo a passo

Etapa 1: Instalar o Pacote

dotnet add package Aspose.Cells_FOSS

Etapa 2: Importar o Namespace

using Aspose.Cells_FOSS;

Etapa 3: Entender as Responsabilidades do Mapeador XML

Cada mapeador lida com uma parte XML da estrutura XLSX:

MapeadorParte XMLManipula
WorkbookXmlMapperxl/workbook.xmlMetadados da pasta de trabalho, lista de planilhas, nomes definidos
WorksheetXmlMapperxl/worksheets/sheetN.xmlDados de célula, fórmulas, hyperlinks, validações, formatos condicionais
SharedStringTableXmlMapperxl/sharedStrings.xmlValores de string desduplicados
StylesheetXmlMapperxl/styles.xmlEstilos de célula, fontes, preenchimentos, bordas

Esses mapeadores são invocados automaticamente durante a construção Workbook e Save(). Você não os instancia diretamente no código da aplicação.


Etapa 4: Tratar XmlParsingException

XmlParsingException é lançada quando um mapeador encontra XML malformado que não pode ser reparado. Ative TryRepairXml = true em LoadOptions para ativar o caminho de análise tolerante a falhas do 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);
}

Etapa 5: Use LoadDiagnostics para Identificar Problemas XML

Após uma carga bem-sucedida, verifique LoadDiagnostics.Issues para registros DiagnosticEntry para entender quais reparos XML foram aplicados e se algum resultou em perda de dados.

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 Comuns e Soluções

XmlParsingException mesmo com TryRepairXml = true. O XML está tão malformado que o analisador tolerante a falhas não pode recuperá‑lo. Isso pode acontecer com arquivos criados por ferramentas não padrão que produzem XML sintaticamente inválido. Não há caminho de recuperação para esses arquivos.

Estilos estão faltando após o carregamento.
O StylesheetXmlMapper pode ter encontrado um xl/styles.xml corrompido. Verifique LoadDiagnostics.Issues para entradas com código relacionado a estilos, e DataLossRisk = true para células afetadas.

Strings compartilhadas aparecem como células vazias.
Um xl/sharedStrings.xml corrompido pode causar células que referenciam a tabela de strings compartilhadas a serem exibidas como vazias. Habilite TryRepairXml para tentar a recuperação.

Perguntas Frequentes

Posso implementar um mapeador XML personalizado?

Não. As classes de mapeamento XML são infraestrutura interna selada e não foram projetadas para extensão.

Por que o SharedStringTableXmlMapper está separado?

A especificação OOXML separa valores de string repetidos em uma tabela de strings compartilhada para reduzir o tamanho do arquivo. O mapper lida com a leitura e gravação desta tabela independentemente dos dados da célula.

O TryRepairXml corrige todos os problemas de análise XML?

TryRepairXml lida com erros recuperáveis, como elementos não fechados, namespaces ausentes e valores de atributos truncados. XML estruturalmente válido, mas semanticamente inconsistente (por exemplo, tokens de fórmula que referenciam células inexistentes) ainda será analisado sem erro.

Veja Também

 Português