[英]In C#, how do I convert a XmlNode to string, with indentation? (Without looping)
这必须是一个如此简单的问题,但我无法得到答案。
我有一个XmlNode,我想要做的就是输出这个节点,作为一个字符串,缩进(制表符或空格)完整,以提供更好的可读性。
到目前为止,我尝试了XmlWriter,XmlTextWriter,XmlDocument,XmlReader。
将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!
}
我需要这样做的原因是输出节点的xml语法高亮。 我使用AvalonEdit突出显示xml,将突出显示的文本输出到html,然后将html转换为可以在RichTextBox中显示的FlowDocument。
您使用XMLTextWriter
处于正确的路径上,您只需要使用StringWriter
作为基本流。 以下是关于如何实现这一目标的一些好答案 。 如果您的编码需要为UTF-8,请特别注意第二个答案。
编辑:
如果你需要在多个地方执行此操作,编写一个扩展方法来重载XmlNode
上的ToString()
是很简单的:
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();
}
}
}
如果你不关心内存或性能,最简单的事情是:
XElement.Parse(xmlNode.OuterXml).ToString()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.