在WPF文本框中显示XML

时间:2009-11-09 18:37:01

标签: wpf xml textbox

将XML节点的外部文本放在WPF文本框中非常简单。但有没有办法让文本框将文本格式化为XML文档?有不同的控制吗?

3 个答案:

答案 0 :(得分:24)

这应该可以解决问题:

    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();
    }

答案 1 :(得分:5)

您可以将转换器附加到转换器,并在转换器内调用格式化代码。

这是格式化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);
}

答案 2 :(得分:3)

  

是否有不同的控件可以做到这一点?

是的,只需在浏览器控件中显示xml。

<WebBrowser x:Name="wbOriginalXml" />

只需导航到已保存的xml

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

结果在浏览器中自动 tree-ed ,可以折叠节点:

enter image description here