2009-07-01 2 views
2

xml-Fileを改行なしで1行にする簡単な方法を探しています。 C#。 System.XMLや小さなオープンソースフレームワーク、またはそれを実装するためのベストプラクティスに既に実装されていますか?C#:One-line-XMLファイルを人間が読める複数行にまとめる簡単な方法

ex。 Visual Studioを持っている場合は


<Root> 
    <Node id="1"> 
    <Childnode> 
     Text 
    </Childnode> 
    </Node> 
    <Node id="2"> 
    Text 
    <Kid name="jack" /> 
    </Node> 
</Root> 

答えて

3


<Root><Node id="1"><Childnode>Text</Childnode></Node><Node id="2">Text<Kid name="jack" /></Node></Root> 

は、新しいXMLファイルを作成し、ちょうどあなたのコードを貼り付け、このXML-文字列を変換します。自動的にフォーマットが変更されます。

+0

これは私が何をすべきかです! –

+0

それは私が求めていたものではありませんでした。私はそれを実装することを求めました。 – Micha

7

は、.NET 3.5を使用している場合:

XDocument document = XDocument.Load(filename); 
document.Save(filename); 

これは自動的にインデントされます。あなたの質問が尋ねられたように、ノードのには、しかインデントしていないので、まったく問題はありません。それはやっかくなるだろう。

あなたは.NET 2.0で立ち往生している場合は、ここではクレイグの方法はrejiggedと文字列の代わりにファイルを使用するように変更です:XmlWriterSettingsはC#3で

public static void FormatXmlString(string inputFile, string outputFile) 
{ 
    XmlDocument document = new XmlDocument(); 
    document.Load(inputFile); 
    XmlWriterSettings settings = new XmlWriterSettings(); 
    settings.Indent = true; 
    using (XmlWriter writer = XmlWriter.Create(outputFile, settings)) 
    { 
     document.WriteTo(writer); 
    } 
} 

ちょうどかもしれない:

new XmlWriterSettings { Indent = true } 
XmlWriter.Createへの呼び出しに埋め込むことができ

ていますが、.NET 2.0を使用している場合、あなたはおそらくを使用することはできませんC#3.

EDIT:入力ファイル名部分が問題になる場合は、使用することができます:

XmlDocument document = new XmlDocument(); 
using (Stream stream = File.OpenRead(inputFile)) 
{ 
    document.Load(stream); 
} 
+0

3.5バージョンと2.0バージョンの違いは3.5です。 filenameからfilenameへの解決策であり、2.0は文字列から文字列への解決策です。どのように2.0のファイル名解決にファイル名ですか? – Micha

+0

代わりにファイルに書き込むXmlWriterを作成します。XmlWriter writer = XmlWriter.Create(filename、settings)。 –

+0

ああ、document.Load(filename)も使用してください。編集します... –

4

ここで私は、この目的のために書いた便利な「FormatXML」クラスです:

using System; 
using System.Text; 
using System.Xml; 
using System.IO; 

public static class FormatXML 
{ 
    public static string FormatXMLString(string sUnformattedXML) 
    { 
     XmlDocument xd = new XmlDocument(); 
     xd.LoadXml(sUnformattedXML); 
     StringBuilder sb = new StringBuilder(); 
     StringWriter sw = new StringWriter(sb); 
     XmlTextWriter xtw = null; 
     try 
     { 
      xtw = new XmlTextWriter(sw); 
      xtw.Formatting = Formatting.Indented; 
      xd.WriteTo(xtw); 
     } 
     finally 
     { 
      if(xtw!=null) 
       xtw.Close(); 
     } 
     return sb.ToString(); 
    } 
} 
+1

xtwパターン – arbiter

+0

usingステートメントが優れているだけでなく、XmlWriter.Create(sb)を使用すると、StringWriterも邪魔にならないようにすることができます。 –

+0

@arbiter、@JonSkeet - 皆さんは、このコードが最適化され、おそらくメカニズムの「完璧な」実装ではないという点で正しいですが、私は上記のコードをそのまま使用しました。私が最近仕事に書いたサンプルのWebサービスクライアントアプリケーションで、うまくいきました!是非、それを改善してください!結局のところ、SOはすべてのことです! :) – CraigTP