2009-11-09 13 views
11

XMLノードの外側のテキストをWPFテキストボックスに配置するのは簡単です。しかし、テキストボックスにXML文書としてテキストを書式設定する方法がありますか?それを行う別のコントロールがありますか?WPFテキストボックスにXMLを表示

答えて

21

これはトリックを行う必要があります。

protected string FormatXml(string xmlString) 
    { 
     XmlDocument doc = new XmlDocument(); 

     doc.LoadXml(xmlString); 

     StringBuilder sb = new StringBuilder(); 

     System.IO.TextWriter tr = new System.IO.StringWriter(sb); 

     XmlTextWriter wr = new XmlTextWriter(tr); 

     wr.Formatting = Formatting.Indented; 

     doc.Save(wr); 

     wr.Close(); 

     return sb.ToString(); 
    } 
4

コンバーターをバインダーに添付して、コンバーター内でフォーマットコードを呼び出すことができます。

これは、XMLをフォーマットサンプルコードです:

public string FormatXml(string xml) 
{ 
    var doc = new XmlDocument(); 
    doc.LoadXml(xml); 
    var stringBuilder = new StringBuilder(); 
    var xmlWriterSettings = new XmlWriterSettings 
            {Indent = true, OmitXmlDeclaration = true}; 
    doc.Save(XmlWriter.Create(stringBuilder, xmlWriterSettings)); 
    return stringBuilder.ToString(); 
} 

とテストは使用方法を示します。

public void TestFormat() 
{ 
    string xml = "<root><sub/></root>"; 
    string expectedXml = "<root>" + Environment.NewLine + 
         " <sub />" + Environment.NewLine + 
         "</root>"; 
    string formattedXml = FormatXml(xml); 

    Assert.AreEqual(expectedXml, formattedXml); 
} 
3

がありますそれを行う別のコントロール?

はい、xmlをブラウザコントロールに表示するだけです。

enter image description here

+0

この:

<WebBrowser x:Name="wbOriginalXml" /> 

単に結果ノードを折りたたむことができ、ブラウザで自動的にツリー編ある保存したXML

wbOriginalXml.Navigate(new Uri(@"C:\TempResult\Manifest.xml")); 

に移動しますメモリ内XML変数ではなく、XMLファイルでのみ動作します – DdW

+0

@DdWはい、XMLがメモリにある場合、一時ファイルに保存する必要があります。 – OmegaMan

関連する問題