使用 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 读取/写入 |