Достаточно просто поместить внешний текст XML node в текстовое поле WPF. Но есть ли способ получить текстовое поле для форматирования текста в виде XML-документа? Есть ли другой элемент управления, который делает это?
Отобразить XML в текстовом поле WPF
Ответ 1
Это должно сделать трюк:
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();
}
Ответ 2
Вы можете прикрепить привязку конвертера и вызвать внутри конвертера код форматирования.
Это пример кода, который форматирует 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") );
Результаты автоматически отображаются в браузере, где узлы могут быть свернуты: