5

XmlDocument適切なインデントを付けてファイルに保存する必要があります(Formatting.Indented)が、子を持つノードの一部は 1 行に収める必要があります(Formatting.None)

XmlTextWriterドキュメント全体の設定を受け入れるので、それを達成する方法は?


@Ahmad Mageedの応答後に編集:

書き込み中に XmlTextWriter の設定を変更できるとは知りませんでした。それは朗報です。

現在、xmlDocument (既にノードで満たされています。具体的には .xaml ページです) を次のように保存しています。

XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
writer.Formatting = Formatting.Indented;
xmlDocument.WriteTo(writer);
writer.Flush();
writer.Close();

もちろん、すべてのノードでインデントを有効にします。<Run>すべてのノードを扱うときは、インデントを無効にする必要があります。

あなたの例では、「手動で」 XmlTextWriter に書き込みます。ノードを検出できるように、すべての xmlDocument ノードをクロールして XmlTextWriter に書き込む簡単な方法はあり<Run>ますか? または、現在のノードのすべての子に移動する何らかの再帰メソッドを作成する必要がありますか?

4

1 に答える 1

3

「XmlTextWriter はドキュメント全体の設定を受け入れるため」とはどういう意味ですか? XmlTextWriter の設定は、一度設定した XmlWriter とは異なり、変更できます。同様に、XmlDocument をどのように使用していますか? 他の人が問題をよりよく理解できるように、試したことを示すコードを投稿してください。

私の理解が正しければ、XmlTextWriter のフォーマットを変更して、1 行に表示するノードに影響を与えることができます。完了したら、フォーマットをリセットしてインデントに戻します。

たとえば、次のようなものです。

XmlTextWriter writer = new XmlTextWriter(...);
writer.Formatting = Formatting.Indented;
writer.Indentation = 1;
writer.IndentChar = '\t';

writer.WriteStartElement("root");

// people is some collection for the sake of an example
for (int index = 0; index < people.Count; index++)
{
    writer.WriteStartElement("Person");

    // some node condition to turn off formatting
    if (index == 1 || index == 3)
    {
        writer.Formatting = Formatting.None;
    }

    // write out the node and its elements etc.
    writer.WriteAttributeString("...", people[index].SomeProperty);
    writer.WriteElementString("FirstName", people[index].FirstName);

    writer.WriteEndElement();

    // reset formatting to indented
    writer.Formatting = Formatting.Indented;
}

writer.WriteEndElement();
writer.Flush();
于 2010-01-10T07:57:05.887 に答える