在C#中,如何使用缩进将XmlNode转换为字符串?(没有循环)

Yuf*_*Yuf 20 c# xml string xmlnode indentation

这必须是一个如此简单的问题,但我无法得到答案.

我有一个XmlNode,我想要做的就是输出这个节点,作为一个字符串,缩进(制表符或空格)完整,以提供更好的可读性.

到目前为止,我尝试了XmlWriter,XmlTextWriter,XmlDocument,XmlReader.

  • 我在XmlDocument中尝试了PreserveWhitespace但是我无法让XmlDocument输出我的节点.
  • 我在XmlTextWriter中尝试了Formatting = Formatting.Indented属性,但我无法弄清楚如何将内容输出到字符串.

将XmlNode输出为字符串WITHOUT缩进很容易.我只是做XmlNode.OuterXml.我如何在那里得到缩进?

我想这样做而不通过XmlNode循环并使用强力来添加空格,因为我认为应该有一个更简单的方法.

谢谢.

编辑:对于未来的读者,这里是答案:

  var xmlNode = is some object of type XmlNode

  using (var sw = new StringWriter())
  {
      using (var xw = new XmlTextWriter(sw))
      {
        xw.Formatting = Formatting.Indented;
        xw.Indentation = 2; //default is 1. I used 2 to make the indents larger.

        xmlNode.WriteTo(xw);
      }
      return sw.ToString(); //The node, as a string, with indents!
  }
Run Code Online (Sandbox Code Playgroud)

我需要这样做的原因是输出节点的xml语法高亮.我使用AvalonEdit突出显示xml,将突出显示的文本输出到html,然后将html转换为可以在RichTextBox中显示的FlowDocument.

drh*_*ris 29

你是在正确的道路上XMLTextWriter,你只需要使用a StringWriter作为基本流.以下是关于如何实现这一目标的一些好答案.如果您的编码需要为UTF-8,请特别注意第二个答案.

编辑:

如果你需要在多个地方执行此操作,编写一个扩展方法来重载ToString()on 是很简单的XmlNode:

public static class MyExtensions
{
    public static string ToString(this System.Xml.XmlNode node, int indentation)
    {
        using (var sw = new System.IO.StringWriter())
        {
            using (var xw = new System.Xml.XmlTextWriter(sw))
            {
                xw.Formatting = System.Xml.Formatting.Indented;
                xw.Indentation = indentation;
                node.WriteContentTo(xw);
            }
            return sw.ToString();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Kir*_*kov 5

如果你不关心内存或性能,最简单的是:

    XElement.Parse(xmlNode.OuterXml).ToString()
Run Code Online (Sandbox Code Playgroud)