这看起来是一个非常简单的问题,但我就是无法得到答案。
我有一个XmlNode,我想做的就是输出这个节点作为一个字符串,并保留缩进(制表符或空格)以提供更好的可读性。
到目前为止,我尝试了XmlWriter、XmlTextWriter、XmlDocument和XmlReader。
我尝试过在XmlDocument中使用PreserveWhitespace,但无法让XmlDocument输出我的节点。
我在XmlTextWriter中试过Formatting = Formatting.Indented属性,但我无法弄清如何将内容输出为字符串。
输出不带缩进的XmlNode很容易。我只需使用XmlNode.OuterXml。但如何在其中添加缩进呢?
我想做到这一点,而不必遍历XmlNode并使用暴力方法添加空格,因为我认为应该有更简单的方法。
谢谢。
编辑:对于未来的读者,在这里是答案:
我有一个XmlNode,我想做的就是输出这个节点作为一个字符串,并保留缩进(制表符或空格)以提供更好的可读性。
到目前为止,我尝试了XmlWriter、XmlTextWriter、XmlDocument和XmlReader。
我尝试过在XmlDocument中使用PreserveWhitespace,但无法让XmlDocument输出我的节点。
我在XmlTextWriter中试过Formatting = Formatting.Indented属性,但我无法弄清如何将内容输出为字符串。
输出不带缩进的XmlNode很容易。我只需使用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!
}
我需要这样做的原因是希望输出带有语法高亮的节点xml。我使用了AvalonEdit来对xml进行高亮处理,将高亮文本输出为html,然后将html转换为FlowDocument,以便在RichTextBox中显示。
ToString()
方法,它就可以正常工作。如果你在没有参数的情况下调用它,它将默认使用原始方法。这是一种重载,而不是覆盖。 - drharris