XML Processing と作業する

XML Processing と作業する

XML 処理の取り扱い

XLSX ファイルは OPC パッケージ内の XML パーツにデータを格納します。Aspose.Cells .NET 用の FOSS は、XML のパースおよびシリアライズ層を 4 つのマッパークラス: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, StylesheetXmlMapper を通じて公開します。各マッパーは対応する XML パーツに対して ReadWrite の両方の操作を実装します。これらは内部インフラストラクチャ API であり、ほとんどのアプリケーションコードは WorkbookWorksheet オブジェクトのみを通して動作します。


XML マッパークラス

各 XML マッパーは XLSX 構造の XML パーツを 1 つ担当します:

MapperXML パートResponsibility
WorkbookXmlMapperxl/workbook.xmlブックレベルのメタデータ、シート参照、定義名
WorksheetXmlMapperxl/worksheets/sheetN.xmlセルデータ、数式、ハイパーリンク、条件付き書式、データ検証
SharedStringTableXmlMapperxl/sharedStrings.xml重複除去された文字列値のための共有文字列テーブル
StylesheetXmlMapperxl/styles.xmlセルスタイル、フォント、塗りつぶし、罫線、数値書式

各マッパーは 2 つのメソッド — 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);
}

ヒントとベストプラクティス

  • LoadOptionsTryRepairXml = true を設定して、マッパーのフォールトトレラント解析パスを有効にします。
  • 外部システムからのファイルを処理する際、破損した XML を生成する可能性がある場合、WorkbookLoadException に加えて XmlParsingException を捕捉してください。
  • XML マッパークラスはアプリケーションコードからインスタンス化することを想定していません — Workbook の構築および Save() の間に自動的に呼び出されます。
  • 診断のために生の XML コンテンツを検査する必要がある場合、XLSX を ZIP として抽出し、該当する XML パーツを直接確認してください。

一般的な問題

問題原因修正
読み込み時のXmlParsingExceptionXLSX の一部で、XML が不正ですLoadOptionsTryRepairXml = 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 のパース失敗時にスローされます

参照

 日本語