Как работать с XML-обработкой в .NET

Как работать с XML-обработкой в .NET

XLSX файлы хранят свои данные в XML-частей внутри пакета OPC ZIP. Aspose.Cells для .NET обрабатывает эти данные через четыре класса XML mapper: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, и StylesheetXmlMapper.Понимание этих классов помогает диагностировать сбои в анализе и правильно настроить загрузку, способную выдержать ошибки. dotnet add package Aspose.Cells_FOSS.

Пошаговое руководство

Шаг 1: Установите пакет

dotnet add package Aspose.Cells_FOSS

Шаг 2: Импортировать пространства имён

using Aspose.Cells_FOSS;

Шаг 3: Понимание обязанностей XML Mapper

Каждый картограф обрабатывает одну часть XML структуры XLSX:

КартаXML частьРуки
WorkbookXmlMapperxl/workbook.xmlМетаданные рабочей книги, список листов, определенные имена
WorksheetXmlMapperxl/worksheets/sheetN.xmlДанные ячейки, формулы, гиперссылки, валидации, условные форматы
SharedStringTableXmlMapperxl/sharedStrings.xmlДе-двойные значения строк
StylesheetXmlMapperxl/styles.xmlСтили ячейки, шрифты, заполнения, границы

Эти карты автоматически отображаются во время Workbook строительство и Save().Вы не инстантируете их непосредственно в прикладном коде.


Шаг 4: Управление XmlParsingException

XmlParsingException выброшен, когда картограф сталкивается с неправильно сформированным XML, который нельзя исправить. TryRepairXml = true В LoadOptions Для того чтобы активировать путь пассивного анализа маппера.

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);
}

Шаг 5: Используйте LoadDiagnostics для выявления проблем XML

После успешной загрузки проверьте LoadDiagnostics.Issues для DiagnosticEntry Записи, чтобы понять, какие XML-ремонт были применены и если какой-либо из них привел к потере данных.

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}");
}

Общие проблемы и решения

XmlParsingException Даже с TryRepairXml = true. XML настолько сформирован, что не может восстановить его толерантный к ошибкам аналитик.Это может произойти с файлами, созданными нестандартными инструментами, которые производят синтаксически недействительный XML.

Стиль не хватает после загрузки. ТЭ StylesheetXmlMapper Может быть, он встретил коррумпированного человека. xl/styles.xml.Проверьте LoadDiagnostics.Issues для записей с кодом, связанным со стилями; и DataLossRisk = true для пораженных клеток.

Разделенные строки появляются как пустые ячейки. Корумпированный xl/sharedStrings.xml может привести к тому, что клетки, ссылающиеся на общую таблицу строк, будут отображаться как пустые. TryRepairXml Попытка окупаемости .

Часто задаваемые вопросы

Можно ли использовать XML mapper?

Класс XML-карточка является запечатанной внутренней инфраструктурой и не предназначен для расширения.

Почему это SharedStringTableXmlMapper Отдельно ли?

Спецификация OOXML разделяет повторяющиеся значения строк в общую таблицу строков для уменьшения размера файла.

делает TryRepairXml Решить все проблемы с XML-паразитом?

TryRepairXml обрабатывает восстановимые ошибки, такие как незакрытые элементы, отсутствующие именные пространства и отрезанные значения атрибутов. Структурно действительный, но семантически несовместимый XML (например, формулы токенов, ссылающихся на несуществующих ячейки) все равно будет анализироваться без ошибок.

Это тоже

 Русский