我有一个XElement
实例,我希望使用XmlWriter
类写入一个流。为什么?好吧,其中一个配置设置定义是否使用二进制Xml。根据此设置,可以创建合适的XmlWriter
实例 - XmlWriter.Create(stream)
或XmlDictionaryWriter.CreateBinaryWriter(stream))
。
无论如何,我正在尝试以下代码,但它将流留空:
using (var stream = new MemoryStream())
{
var xmlReader = new XDocument(xml).CreateReader();
xmlReader.MoveToContent();
var xmlWriter = GetXmlWriter(stream);
xmlWriter.WriteNode(xmlReader, true);
return stream.ToArray();
}
我已经检查过,xmlReader
在根{XML}元素MoveToContent
之后正确对齐。
我一定是做错了什么,但是什么?
感谢。
答案 0 :(得分:10)
你还没有展示GetXmlWriter的作用......但是你试过刷新作者吗?
xmlWriter.Flush();
或者,将XmlWriter
包装在另一个using
语句中:
using (var stream = new MemoryStream())
{
var xmlReader = new XDocument(xml).CreateReader();
xmlReader.MoveToContent();
using (var xmlWriter = GetXmlWriter(stream))
{
xmlWriter.WriteNode(xmlReader, true);
}
return stream.ToArray();
}
您可能也希望对XmlReader
也这样做,尽管在这种特殊情况下我不相信您特别需要。
说完这一切之后,我不完全确定你为什么要使用XmlReader
。您有任何理由不能找到相关的XElement
并使用XElement.WriteTo(XmlWriter)
吗?或者,如果您要复制整个文档,只需使用XDocument.WriteTo(XmlWriter)