Como trabalhar com o processamento XML no .NET

Como trabalhar com o processamento XML no .NET

Os arquivos XLSX armazenam seus dados em partes XML dentro de um pacote OPC ZIP. Aspose.Cells FOSS para .NET processa estes através de quatro classes de mapeamento XML: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, e StylesheetXmlMapper.Compreender essas classes ajuda a diagnosticar falhas de análise e configurar corretamente o carregamento tolerante a falha. Instalar com dotnet add package Aspose.Cells_FOSS.

Guia passo a passo

Passo 1: Instalar o pacote

dotnet add package Aspose.Cells_FOSS

Passo 2: Importar o espaço de nomes

using Aspose.Cells_FOSS;

Passo 3: Compreender as responsabilidades do XML Mapper

Cada mapeador lida com uma parte XML da estrutura XLSX:

Mapper (mapa)XML ParteManoplas
WorkbookXmlMapperxl/workbook.xmlMetadados do livro de trabalho, lista de folhas, nomes definidos
WorksheetXmlMapperxl/worksheets/sheetN.xmlDados de células, fórmulas, hiperlinks, validações, formatos condicionais
SharedStringTableXmlMapperxl/sharedStrings.xmlValores de cadeia desduplicados
StylesheetXmlMapperxl/styles.xmlEstilo de célula, fonte, preenchimento, bordas

Estes mapeadores são invocados automaticamente durante o processo de análise. Workbook construção e Save().Não as instanciamos diretamente no código da aplicação.


Passo 4: Manusear a Excepção de XmlParsing

XmlParsingException é lançado quando um mapeador encontra XML malformado que não pode ser reparado. Enable TryRepairXml = true em: LoadOptions Para ativar o mapa de erro tolerante caminho de análise.

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: Use o LoadDiagnostics para identificar problemas XML

Após uma carga bem sucedida, verificar a posição do motor. LoadDiagnostics.Issues para o DiagnosticEntry registos para compreender quais os 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 parser 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.

Desaparecem estilos depois de carregar. A Comissão StylesheetXmlMapper Pode ter encontrado um corrupto . xl/styles.xml.- Cheque. LoadDiagnostics.Issues para as entradas com código relacionado a estilos, e DataLossRisk = true para as células afectadas.

As cadeias compartilhadas aparecem como células vazias. Um corrupto . xl/sharedStrings.xml pode fazer com que as células que fazem referência à tabela de cadeia compartilhada sejam renderizadas como vazias. Enable TryRepairXml Para tentar a recuperação.

Perguntas Frequentes

Posso implementar um mapeador XML personalizado?

Não. As classes de mapeadores XML são infraestruturas internas seladas e não foram projetadas para extensão.

Por que é o SharedStringTableXmlMapper separados?

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

- Sim . TryRepairXml Corrigir todos os problemas de análise XML?

TryRepairXml XML estruturalmente válido, mas semanticamente inconsistente (por exemplo, tokens de fórmula que fazem referência a células inexistentes) ainda irá ser analisado sem erro.

Ver também:

 Português