.NETでXML処理を扱う方法

.NETでXML処理を扱う方法

XLSX ファイルは、OPC ZIP パッケージ内の XML パーツにデータを格納します。Aspose.Cells FOSS for .NET は、これらを 4 つの XML マッパークラス(WorkbookXmlMapperWorksheetXmlMapperSharedStringTableXmlMapperStylesheetXmlMapper)で処理します。これらのクラスを理解することで、パース失敗の診断やフォールトトレラント ローディングの正しい構成が可能になります。dotnet add package Aspose.Cells_FOSS でインストールしてください。

ステップバイステップ ガイド

ステップ 1: パッケージをインストールする

dotnet add package Aspose.Cells_FOSS

ステップ 2: 名前空間をインポートする

using Aspose.Cells_FOSS;

ステップ 3: XML マッパーの責任を理解する

各マッパーはXLSX構造のXMLパーツを1つずつ処理します:

マッパーXML パート処理内容
WorkbookXmlMapperxl/workbook.xmlワークブック メタデータ、シート リスト、定義名
WorksheetXmlMapperxl/worksheets/sheetN.xmlセル データ、数式、ハイパーリンク、検証、条件付き書式
SharedStringTableXmlMapperxl/sharedStrings.xml重複除去された文字列値
StylesheetXmlMapperxl/styles.xmlセル スタイル、フォント、塗りつぶし、罫線

これらのマッパーは Workbook の構築中および Save() の間に自動的に呼び出されます。アプリケーションコードで直接インスタンス化することはできません。


ステップ 4: XmlParsingException の処理

XmlParsingException は、マッパーが修復できない不正な XML に遭遇したときにスローされます。LoadOptionsTryRepairXml = true を有効にすると、マッパーのフォールトトレラント パーシング パスが有効になります。

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)");

    var diag = wb.LoadDiagnostics;
    if (diag.HasRepairs)
        Console.WriteLine("XML repairs applied. Data loss risk: " + diag.HasDataLossRisk);
}
catch (XmlParsingException ex)
{
    Console.WriteLine("Unrecoverable XML error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Load failed: " + ex.Message);
}

ステップ 5: LoadDiagnostics を使用して XML の問題を特定する

ロードが成功した後、LoadDiagnostics.IssuesDiagnosticEntryレコードを確認し、どのXML修復が適用されたか、そしてそれらがデータ損失を引き起こしたかどうかを把握してください。

using Aspose.Cells_FOSS;

var opts = new LoadOptions { TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;

foreach (var entry in diag.Issues)
{
    Console.WriteLine($"[{entry.Severity}] {entry.Code}");
    Console.WriteLine($"  Message: {entry.Message}");
    Console.WriteLine($"  RepairApplied: {entry.RepairApplied}  DataLossRisk: {entry.DataLossRisk}");
}

一般的な問題と修正

XmlParsingException でも TryRepairXml = true
XML があまりにも不正な形式であるため、フォールトトレラント パーサーでは復元できません。構文的に無効な XML を生成する非標準ツールで作成されたファイルでこのようなことが起こり得ます。これらのファイルに対する復旧手段はありません。

ロード後にスタイルが欠落しています。
StylesheetXmlMapper は破損した xl/styles.xml に遭遇した可能性があります。LoadDiagnostics.Issues を確認して、スタイルに関連するコードのエントリを探し、DataLossRisk = true で影響を受けたセルを確認してください。

共有文字列が空のセルとして表示されます。
破損したxl/sharedStrings.xmlが、共有文字列テーブルを参照するセルを空として表示させることがあります。TryRepairXmlを有効にして回復を試みてください。

よくある質問

カスタム XML マッパーを実装できますか?

いいえ。XML マッパークラスはシールドされた内部インフラストラクチャであり、拡張用に設計されていません。

なぜ SharedStringTableXmlMapper は別々なのですか?

OOXML 仕様では、繰り返し使用される文字列値を共有文字列テーブルに分離して、ファイルサイズを削減します。マッパーはセルデータとは独立してこのテーブルの読み取りと書き込みを処理します。

TryRepairXmlはすべてのXMLパース問題を修正しますか?

TryRepairXml は、閉じられていない要素や名前空間の欠如、属性値の切り捨てなど、回復可能なエラーを処理します。構造的に有効であっても意味的に一貫性のない XML(例: 存在しないセルを参照する数式トークン)は、エラーなく解析されます。

参照

 日本語