【发布时间】:2016-02-24 13:29:26
【问题描述】:
我想编写一个非常大的 XML 文档,所以System.Xml.Linq.XStreamingDocument 似乎是理想的解决方案。
我认为我可以构造 XDocument 以包含 XStreamingDocument 并且只有当我调用 Save() 时才会遍历树并迭代可枚举。
public void WriteXml(IEnumerable<string> lotsOfStrings, TextWriter output)
{
var rootElement = new XElement("Root",
new XStreamingElement ("Strings", lotsOfStrings.Select(s => new XElement("Line", s))));
var document = new XDocument(rootElement);
document.Save(output);
}
但事实并非如此。只要我将XStreamingElement 添加到包含元素,它就会迭代可枚举并生成所有元素。
我打算将这个长元素列表嵌套在几个元素深处。在调用XStreamingElement.WriteTo() 之前,我是否必须使用XmlWriter 手动编写包含结构?这会有点乏味,最终我会混合范式(XmlWriter 和System.Xml.Linq)。这似乎真的限制了XStreamingElement 的用处。
还是我错过了构建包含流式元素的文档的某种方式?
【问题讨论】:
-
当您将它添加到 XDocument 时,您如何知道它会遍历元素?如果您在调试时显示了它的值,那么这将导致
.ToString()被调用并立即迭代元素。 -
@xjuice 我在
Selectlambda 中放置了一个断点。这在document.Save()被击中之前就被击中了。也可以使用具有副作用的迭代器进行验证。
标签: c# .net xml linq-to-xml