私の目標は、変更されたXMLファイルを出力し、元のファイルにあった特殊なインデントを保持することです。目的は、結果のファイルが元のように見えるようにすることで、ソースコントロールを使ってファイルを比較して簡単にマージすることです。XDocument.Saveを使用して属性のカスタムインデントを使用してファイルを保存する方法
私のプログラムはXMLファイルを読み込み、特定の属性を追加または変更します。ここで
は私が守る/達成しようとしているフォーマットである。この場合、
<Base Import="..\commom\style.xml">
<Item Width="480"
Height="500"
VAlign="Center"
Style="level1header">
(...)
、私は単純に最初のものとの最初の1を超えてすべての属性を揃えたいです。
XmlWriterSettings
はフォーマットオプションを提供しますが、私が探している結果は得られません。
settings.Indent = true;
settings.NewLineOnAttributes = true;
これらの設定は、代わりにノードと同じ行にそれを維持する、改行に最初の属性を置く、およびノードと属性をラインアップします。ここで
は空白を保持するよう要求Load
呼び出し、次のとおりです。
MyXml = XDocument.Load(filepath, LoadOptions.PreserveWhitespace);
しかし、それは私が期待したもの行うことはありませんように思えます。
私はXDocument.Save
コールにXmlWriter
から派生したカスタムクラスを提供しようとしたが、私はInvalidOperationException
に実行せずに空白を正しく挿入するために管理していません。加えて、私が探している小さな追加のために、その解決策は残酷に思われます。参考のために、これは私が完全にXDocument.Saveを使用していないことになった、と代わりにそのクラスを作成した(とにかく動作しません)私のカスタムXMLライター
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineOnAttributes = true;
settings.OmitXmlDeclaration = true;
using (XmlWriter writer = XmlWriter.Create(filepath + "_auto", settings))
{
MyXml.Save(writer);
}
私は、System.Xmlのは、完全に任意のフォーマットの仕様をサポートするように設計されたとは思いません。特定の形式をサポートする独自のXmlWriter実装を作成することもできますし、そのまま使用できる形式を使用して開始することもできます。 –