2009-11-09 85 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。

<WebBrowser x:Name="wbOriginalXml" /> 

只需瀏覽到一個保存的XML

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

結果是自動樹版在瀏覽器中,其中的節點均可摺疊:

enter image description here

+0

這隻適用於XML文件,不適用於內存中的XML變量 – DdW 2016-07-29 12:13:38

+0

@DdW如果XML在內存中,則必須保存到臨時文件。 – OmegaMan 2016-07-29 13:46:22