XML の処理を使用する
XML 処理を扱う
Aspose.Cells FOSS for C++ は、XLSX ファイルを構成する Open XML 部分を読み書きするための軽量な内部 XML レイヤーを使用します。XmlDocument、XmlElement、および XmlAttribute クラスがこのレイヤーのコアを形成します。
XML ドキュメントの読み込み
インメモリのドキュメントツリーに XML 文字列またはファイルを解析するには、XmlDocument::Load を使用します:
#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 の構築と保存
プログラムで XML ドキュメントを構築するには XmlDocument::Build を使用し、XmlDocument::SaveToUtf8 を使用してそれを UTF-8 文字列にシリアライズします:
XmlDocument doc;
// Build the document structure
auto xml = doc.SaveToUtf8();要素の走査
XmlElementは、要素の値、子要素、属性への軽量ハンドルベースのアクセスを提供します。デフォルト構築された要素はIsNull() == trueを返し、これは安全なnullチェックとして使用できます:
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()を確認してください — 存在しないパスの要素はnullハンドルを返します。 - デバッグや中間XML状態のログ記録のためにシリアライズされた文字列を取得するには
XmlDocument::SaveToUtf8()を使用します。 - アプリケーションコード内でマッパークラス(
WorkbookXmlMapper、WorksheetXmlMapperなど)を直接インスタンス化しないでください — 代わりにWorkbook::SaveとWorkbook(filePath)を使用します。 XmlParsingExceptionは不正なXMLでスローされます;外部XMLのロードは常にtry/catchブロックでラップしてください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
IsNull() は true を返します | 期待されたパスに要素が見つかりません | トラバーサル前に XML の構造を検証してください |
XmlParsingException のロード時 | 不正な形式または非UTF-8 XML | Load に渡す前に、入力 XML を検証してください |
| マッパーの出力が入力と異なります | 保存前のモデル変更 | 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 の読み書き |