如何从c#中的XDocument创建缩进XML字符串?
我有一个XDocument对象,ToString()方法返回XML而不进行任何缩进。如何从这个包含缩进XML的字符串中创建字符串 编辑:我问的是如何创建内存中的字符串,而不是将其写入文件 编辑:看起来我不小心问了个问题。。。ToString()确实返回缩进的XML。From如何从c#中的XDocument创建缩进XML字符串?,c#,linq-to-xml,C#,Linq To Xml,我有一个XDocument对象,ToString()方法返回XML而不进行任何缩进。如何从这个包含缩进XML的字符串中创建字符串 编辑:我问的是如何创建内存中的字符串,而不是将其写入文件 编辑:看起来我不小心问了个问题。。。ToString()确实返回缩进的XML。From XmlDocument doc=新的XmlDocument(); doc.LoadXml(“扳手”); //将文档保存到文件并自动缩进输出。 XmlTextWriter=newXMLTextWriter(“data.xml”
XmlDocument doc=新的XmlDocument();
doc.LoadXml(“扳手”);
//将文档保存到文件并自动缩进输出。
XmlTextWriter=newXMLTextWriter(“data.xml”,null);
writer.Formatting=格式化.缩进;
保存文档(编写器);
要使用XDocument(而不是XmlDocument)创建字符串,可以使用:
XDocument doc = new XDocument(
new XComment("This is a comment"),
new XElement("Root",
new XElement("Child1", "data1"),
new XElement("Child2", "data2")
)
);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
StringBuilder sb = new StringBuilder();
using (XmlWriter writer = XmlTextWriter.Create(sb, settings)) {
doc.WriteTo(writer);
writer.Flush();
}
string outputXml = sb.ToString();
编辑:更新为使用
XmlWriter。创建和StringBuilder
以及良好的形式(使用)。只需再来一种味道相同的汤…;-)
编辑:谢谢。这里有一个版本,应该更好地符合
问题是如何创建字符串,而不是如何创建文件。@JC:使用StringWriter而不是XmlTextWriter构造函数中的文件名来获取字符串。-1:不要使用new XmlTextWriter()
或new XmlTextReader()
past.NET 1.1。使用XmlWriter.Create()
或XmlReader.Create()
。比起我的,你更喜欢这个,但你的用法在哪里-1:不要在.NET 1.1之前使用新的XmlTextWriter()或新的XmlTextReader()。使用XmlWriter.Create()或XmlReader.Create()-1:不要在.NET 1.1之前使用新的XmlTextWriter()或新的XmlTextReader()。使用XmlWriter.Create()或XmlReader.Create()谢谢,我错过了。我相应地更新了示例(同时降低了使用StringBuilder的复杂性!)仅供参考,在审阅时,我仍然希望保留我的否决票,因为您没有使用使用块。@JohnSaunders:再次感谢并再次更新。我怀疑我最初是想把重点放在基本行为上,但是草率的示例往往会在其他地方的草率代码中结束XDocument.ToString()
默认设置缩进格式。要获得未格式化的输出,您必须通过调用.ToString(SaveOptions.DisableFormatting)
来实现。谢谢@joelmueller你能发布你的代码吗?让XDocument.ToString不缩进XML的唯一方法是显式地将SaveOptions.DisableFormatting传递给ToString方法。我在这里尝试了答案。它们没有效果(仍然使用空格)。使用.Net 4(非客户端)。相关:
XDocument doc = new XDocument(
new XComment("This is a comment"),
new XElement("Root",
new XElement("Child1", "data1"),
new XElement("Child2", "data2")
)
);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
StringBuilder sb = new StringBuilder();
using (XmlWriter writer = XmlTextWriter.Create(sb, settings)) {
doc.WriteTo(writer);
writer.Flush();
}
string outputXml = sb.ToString();
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
Console.WriteLine(sw.ToString());
using System;
using System.Text;
using System.Xml;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
XDocument doc = new XDocument(
new XComment("This is a comment"),
new XElement("Root",
new XElement("Child1", "data1"),
new XElement("Child2", "data2")
)
);
var builder = new StringBuilder();
var settings = new XmlWriterSettings()
{
Indent = true
};
using (var writer = XmlWriter.Create(builder, settings))
{
doc.WriteTo(writer);
}
Console.WriteLine(builder.ToString());
}
}
XDocument doc = XDocument.Parse(xmlString);
string indented = doc.ToString();