.NETでXML処理を扱う方法
XLSX ファイルは、OPC ZIP パッケージ内の XML パーツにデータを格納します。Aspose.Cells FOSS for .NET は、これらを 4 つの XML マッパークラス(WorkbookXmlMapper、WorksheetXmlMapper、SharedStringTableXmlMapper、StylesheetXmlMapper)で処理します。これらのクラスを理解することで、パース失敗の診断やフォールトトレラント ローディングの正しい構成が可能になります。dotnet add package Aspose.Cells_FOSS でインストールしてください。
ステップバイステップ ガイド
ステップ 1: パッケージをインストールする
dotnet add package Aspose.Cells_FOSSステップ 2: 名前空間をインポートする
using Aspose.Cells_FOSS;ステップ 3: XML マッパーの責任を理解する
各マッパーはXLSX構造のXMLパーツを1つずつ処理します:
| マッパー | XML パート | 処理内容 |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | ワークブック メタデータ、シート リスト、定義名 |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | セル データ、数式、ハイパーリンク、検証、条件付き書式 |
SharedStringTableXmlMapper | xl/sharedStrings.xml | 重複除去された文字列値 |
StylesheetXmlMapper | xl/styles.xml | セル スタイル、フォント、塗りつぶし、罫線 |
これらのマッパーは Workbook の構築中および Save() の間に自動的に呼び出されます。アプリケーションコードで直接インスタンス化することはできません。
ステップ 4: XmlParsingException の処理
XmlParsingException は、マッパーが修復できない不正な XML に遭遇したときにスローされます。LoadOptions で TryRepairXml = 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.IssuesでDiagnosticEntryレコードを確認し、どの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(例: 存在しないセルを参照する数式トークン)は、エラーなく解析されます。