使用 XML 处理

使用 XML 处理

XLSX 文件将其数据存储在 OPC 包内的 XML 部分。Aspose.Cells 用于 .NET 的 FOSS 公开了 XML 解析和序列化层,提供了四个映射器类:WorkbookXmlMapperWorksheetXmlMapperSharedStringTableXmlMapperStylesheetXmlMapper。每个映射器为其对应的 XML 部分实现了 ReadWrite 操作。这些是内部基础设施 API——大多数应用代码完全通过 WorkbookWorksheet 对象工作。


XML 映射器类

每个 XML 映射器负责 XLSX 结构中的一个 XML 部分:

MapperXML 部分Responsibility
WorkbookXmlMapperxl/workbook.xml工作簿级元数据,工作表引用,定义的名称
WorksheetXmlMapperxl/worksheets/sheetN.xml单元格数据,公式,超链接,条件格式,数据验证
SharedStringTableXmlMapperxl/sharedStrings.xml用于去重字符串值的共享字符串表
StylesheetXmlMapperxl/styles.xml单元格样式、字体、填充、边框、数字格式

每个映射器公开两个方法——ReadWrite——分别由库的加载和保存管道调用。


XmlParsingException

XmlParsingException 在映射器遇到无法修复的错误 XML 时抛出。当错误特别发生在 XML 解析期间时,它在错误层级中先于 WorkbookLoadException 被抛出。

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)");
}
catch (XmlParsingException ex)
{
    Console.WriteLine("XML parse error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Load error: " + ex.Message);
}

技巧与最佳实践

  • LoadOptions 中设置 TryRepairXml = true 以启用映射器的容错解析路径。
  • 在处理可能产生错误的 XML 的外部系统文件时,除了捕获 WorkbookLoadException 之外,还要捕获 XmlParsingException
  • 不应由应用代码实例化 XML 映射器类——它们会在 Workbook 构建和 Save() 期间自动调用。
  • 如果需要检查原始 XML 内容以进行诊断,请将 XLSX 提取为 ZIP 并直接检查相关的 XML 部分。

常见问题

问题原因修复
XmlParsingException 在加载时XLSX 的某个部件中出现了格式错误的 XMLLoadOptions 中设置 TryRepairXml = true
往返后缺少样式StylesheetXmlMapper 无法解析自定义样式记录检查 LoadDiagnostics.Issues 中的样式相关修复条目
加载的文件中缺少共享字符串SharedStringTableXmlMapper 遇到了损坏的共享字符串表启用 TryRepairXml;请确认原始文件具有有效的 xl/sharedStrings.xml

FAQ

我可以实现自己的 XML 映射器吗?

XML 映射器类是封闭的内部基础设施。当前的 API 表层不支持自定义映射器。

为什么会有单独的 SharedStringTableXmlMapper

OOXML 规范将字符串值分离到共享字符串表(xl/sharedStrings.xml)中,以去除工作簿中重复的字符串。映射器独立处理该表的读取和写入。

TryRepairXml = true 能解决所有 XML 问题吗?

TryRepairXml 处理可恢复的问题,例如未闭合的元素、缺失的命名空间和被截断的值。结构上有效但语义上不一致的 XML(例如损坏的公式引用)仍可能导致 XmlParsingException


API Reference 摘要

描述
WorkbookXmlMapper读取/写入 xl/workbook.xml
WorksheetXmlMapper每张工作表读取/写入 XML 部分
SharedStringTableXmlMapper读取/写入 xl/sharedStrings.xml
StylesheetXmlMapper读取/写入 xl/styles.xml
XmlParsingException在不可恢复的 XML 解析失败时抛出

另请参阅

 中文