2009-11-09 3 views
11

Достаточно просто разместить внешний текст узла XML в текстовом поле WPF. Но есть ли способ получить текстовое поле для форматирования текста в виде XML-документа? Есть ли другой контроль, который делает это?Показать XML в текстовом поле WPF

ответ

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")); 

The результаты автоматически дерево-эд в браузере, где узлы могут быть свернуты:

enter image description here

+0

Это работает только с XML-файлами, а не в переменных XML в памяти – DdW

+0

@DdW Да, нужно сохранить во временный файл, если XML находится в памяти. – OmegaMan