3

私の目標は、C# コードを使用して手動で記述された XML ドキュメントをプログラムでインデントすることです。

現時点では、ここで指定されている XmlWriter を使用してインデントしています。

しかし、まだ 2 つの問題があります。

  1. インデントの後、すべての改行が消えます (XML ドキュメント内に人為的な改行を保持したいのです)。
  2. テキスト ノードとサブ要素の両方を持つ XML 要素は、1 行にマージされます。例えば:
<element>text
  <subElement></subElement>
</element>

これにインデントされます:

<element>text<subElement></subElement></element>

上記の問題は両方とも実際には同じ問題だと思います。

4

2 に答える 2

1

一般に、XML ドキュメントに空白を挿入すると、ドキュメントのセマンティクスが変更される危険があります。

ただし、XML ネスト (リフローなし) によって行をインデントしたい場合は、ほとんどの XML パーサーに付属するシリアライザーを構成して、それを行うことができます。

または、インデントを行うように構成された XSLT スタイルシートを介してドキュメントを配置することもできます。

これらのアプローチはどちらも、自分で書くよりも簡単です。問題の説明で何かを見逃していない限り、必要なことを行う必要があります。

于 2013-12-24T03:07:15.177 に答える
1

XmlWriter を使用している場合は、新しい XmlWriterSettings オブジェクトを作成して設定を渡すことができます。ここでは、インデント、NewLineHandling、およびその他の多くの便利なものを設定できます。

        XmlWriterSettings set = new XmlWriterSettings();
        set.NamespaceHandling = NamespaceHandling.OmitDuplicates;
        set.OmitXmlDeclaration = true;
        set.DoNotEscapeUriAttributes = false;
        set.Indent = true;
        set.NewLineChars = "\n";
        set.IndentChars = "\t";
        set.NewLineHandling = NewLineHandling.None;
        // Make any other changes... up to you

        XmlWriter writer = XmlWriter.Create(Console.Out, set);
        // You can use your writer with the passed settings
于 2013-12-27T00:13:06.113 に答える