使用 XML 处理

使用 XML 处理

Aspose.Cells FOSS for C++ 使用轻量级内部 XML 层来读取和写入构成 XLSX 文件的 Open XML 部分。XmlDocument、XmlElement 和 XmlAttribute 类构成了该层的核心。


加载 XML 文档

使用 XmlDocument::Load 将 XML 字符串或文件解析为内存中的文档树:

#include "aspose/cells_foss/XmlDocument.h"

using namespace Aspose::Cells_FOSS;

// Load from string content
XmlDocument doc;
doc.Load("<root><item key=\"a\">value</item></root>");

构建并保存 XML

使用 XmlDocument::Build 以编程方式构建 XML 文档,并使用 XmlDocument::SaveToUtf8 将其序列化回 UTF-8 字符串:

XmlDocument doc;
// Build the document structure
auto xml = doc.SaveToUtf8();

遍历元素

XmlElement 提供轻量级的基于句柄的访问,用于获取元素的值、子元素和属性。默认构造的元素返回 IsNull() == true,可用作安全的空检查:

XmlElement root = doc.GetRootElement();
if (!root.IsNull()) {
    // Traverse children via GetAttributes
    auto attrs = root.GetAttributes();
}

处理属性

XmlAttribute 提供对元素上属性名称和值对的访问。使用 XmlAttribute::MakeAttribute(name, value) 来创建新属性:

XmlAttribute attr = XmlAttribute::MakeAttribute("key", "value");
bool isNull = attr.IsNull();

内部 XML 映射器

库使用专用的映射器类,将内存中的电子表格模型对象与其 XML 表示相互转换。这些类是序列化层的内部实现:

Mapper 类Responsibility
WorkbookXmlMapper读取并写入工作簿关系部分
WorksheetXmlMapper读取并写入各个工作表 XML 部分
StylesheetXmlMapper读取并写入样式部分
SharedStringTableXmlMapper读取和写入共享字符串表

每个映射器公开 Read 和 Write 方法。这些方法由 XlsxWorkbookSerializer 在内部调用,不建议在应用代码中直接使用。


错误处理

XML 解析错误会抛出 XmlParsingException。在加载不受信任或格式错误的 XML 时捕获此异常:

try {
    doc.Load(xmlContent);
} catch (const XmlParsingException& ex) {
    // Handle parse error
}

技巧与最佳实践

  • 在访问元素数据之前检查 XmlElement::IsNull() — 缺失路径上的元素将返回空句柄。
  • 使用 XmlDocument::SaveToUtf8() 获取序列化字符串,以便调试或记录中间 XML 状态。
  • 不要在应用代码中直接实例化映射器类(WorkbookXmlMapper、WorksheetXmlMapper 等)—而应使用 Workbook::Save 和 Workbook(filePath)。
  • XmlParsingException 会在 XML 格式错误时抛出;始终在外部 XML 加载时使用 try/catch 块进行包装。

常见问题

问题原因修复
IsNull() 返回 true在预期路径未找到元素在遍历之前验证 XML 结构
XmlParsingException 在加载时格式错误或非UTF-8 XML在将输入的XML传递给Load之前,请先验证
映射器输出与输入不同保存前的模型变更在调用Save之前,确保所有模型更改已提交

API Reference 摘要

类/方法描述
XmlDocument::Load(content)解析一个XML字符串
XmlDocument::Build()用编程方式构建文档
XmlDocument::SaveToUtf8()将文档序列化为 UTF-8 字符串
XmlElement::IsNull()检查元素句柄是否有效
XmlElement::GetValue()获取元素的文本内容
XmlElement::GetAttributes()获取属性集合
XmlAttribute::IsNull()检查属性句柄是否有效
XmlAttribute::MakeAttribute(name, value)创建新的属性句柄
XmlParsingException在格式错误的 XML 输入时抛出
WorksheetXmlMapper内部工作表 XML 读/写
WorkbookXmlMapper内部工作簿 XML 读取/写入

另请参阅

 中文