C#でXMLに改行とインデントを追加する-セルの「取り消し線」の削除のおまけ

2021年3月7日

どもです。

今回の記事は、エクセルの取り消し線を削除するエントリの中で調べた内容です。
エクセルの取り消し線を削除するエントリは、以下のリンクを参照してください。

セル内の「取り消し線で消された文字列」を削除してみた
セル内の「取り消し線で消された文字列」の削除を簡単にしてみた
セルに「取り消し線」が設定されているかを判定してみた

前回までの中で、エクセルの内容のXMLを表示しました。
ところがこのXML、xlsxファイルを解凍したそのままの内容ではありません。
一部、変更を加えています。

今回は、この「加えた変更の内容」と、「変更を簡単に加える方法」について書きます。

1.加える変更

まず、「加える変更の内容」です。
前回までの記事で紹介したXMLは、エクセルを解凍したXMLファイル(以降、『生XML』と呼称します)Lは、改行やインデントが設定されていません。
そのため、タグの値、文字列に改行が無い場合、エディタで表示した場合、その内容が1行で表示されます。
これは、中身を確認しようとする場合、とても解析がしにくいです。
そのため、読み易くするために、改行とインデントを手動で加えていました。
これを、ツールを通して自動で設定できるようにしました。

2.変更を簡単に加える方法

2.1.作業環境

今回の開発環境を、以下に示します。

項目 内容
OS Windows10 Pro(1909)
CPU i7-8700
メモリ 16GB
IDE VisualStudioCommnuity 2019
version 16.5.1
.NET Framework 4.7
言語 C#

2.2.実装した処理

生XMLに対して改行とインデントを加える処理は、C#では以下のような実装で実現しています。

public class XmlConverter : IConverter
    public string Convert(string srcFilePath)
    {
        string dstFilePath = this.CreateDstFilePath(srcFilePath);
        XDocument xDoc = XDocument.Load(srcFilePath);
        using (var writer = new XmlTextWriter(dstFilePath, System.Text.Encoding.UTF8))
        {
            writer.Formatting = System.Xml.Formatting.Indented;
            writer.Indentation = 4;
            xDoc.Save(writer);
        }

        return dstFilePath;
    }
}

コレだけです。
(CreateDstFilePathは、変換後のファイルの出力先のパスを生成するための、自前のメソッドです。)
この数行で、生XMLに改行とインデントを加え、XMLの構造を解析し易くできます。
また、上のコードではインデント幅を設定していますが、インデント幅を気にしないのであれば、次のコードで十分です。

public class XmlConverter : IConverter
    public string Convert(string srcFilePath)
    {
        string dstFilePath = this.CreateDstFilePath(srcFilePath);
        XDocument xDoc = XDocument.Load(srcFilePath);
        xDoc.Save(dstFilePath);

        return dstFilePath;
    }
}

とても単純です。

3.まとめ

今回は、改行やインデントが設定されていないXMLファイルに対して、これらの項目を追加し、解析可能な構造に変換する処理について書きました。
改行やインデントを加えるだけであれば、非常に簡単なコードで、目的の処理は実現可能です。
このエントリ、コードが、似たようなことで困っている方を少しでも助けることができれば幸いです。

ではっ!

ex.公開しています

本エントリで紹介したコードは、GitHubで公開しています。
GUIを追加したバージョンもあります。
エントリ内の記事だけではなく、この記事も参考にしていただければと思います。