Ваша первая проблема в том, что у вас нет XML - у вас есть поток байтов, который можно загрузить в XDocument
или XmlDocument
.Вам действительно нужно выводить в поток, а не прямо в XML-документ?
Кстати, я думаю, вам нужно потерять блок using
вокруг MemoryStream
.Вы не сможете использовать поток в течение длительного времени после его утилизации.
public void AppendElement()
{
XDocument doc;
using(MemoryStream stream = GetXml())
{
using(var sr = new StreamReader(stream))
{
doc = XDocument.Load(sr);
}
}
if(doc.Root != null)
{
doc.Root.Add(new XElement("Whatever"));
}
}
private static MemoryStream GetXml()
{
var settings = new XmlWriterSettings {Indent = true};
var memoryStream = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(memoryStream, settings))
{
writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteStartElement("element");
writer.WriteString("content");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
}
return memoryStream;
}
Для эффективности попробуйте работать напрямую с XDocument
.Кажется, вы хотите использовать XmlWriter
, поэтому вот как это сделать (не проверено):
public void AppendElement()
{
XDocument doc = GetXml();
if(doc.Root != null)
{
doc.Root.Add(new XElement("Whatever"));
}
}
private static XDocument GetXml()
{
var doc = new XDocument();
using (XmlWriter writer = doc.CreateWriter())
{
writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteStartElement("element");
writer.WriteString("content");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
}
return doc;
}
Обновление:
Вы можете написатьXML с
doc.Save(HttpContext.Response.Output);
Опять же, я не могу проверить это сейчас, но попробуйте это:
private static XDocument GetXml()
{
return new XDocument(
new XElement(
"root",
new XElement(
"element",
"content")));
}