Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to include Declaration with XElement.ToString()

I am trying to write an XML response for my web service however I can't figure out how to make the declaration appear in the response.

My code is like so :

StringBuilder sBuilder = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(sBuilder))
{
    writer.WriteStartDocument();
    writer.WriteStartElement("ReportResponse");
    Response.WriteXml(writer);
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

var response = XElement.Parse(sBuilder.ToString());
return response;

Response is just a POCO for storing response data.

I am aware that the Save method includes the declaration and the ToString() method does not. I need to write my declaration back with ToString().

I really just want to return custom XML from my REST Service without casting my string 100 times to return valid XML. Is this even possible or am just spinning my wheels ?

like image 230
BentOnCoding Avatar asked Dec 27 '11 19:12

BentOnCoding


1 Answers

If you want to include xml declaration, you can do it this way:

XDocument xdoc = XDocument.Parse(xmlString);
StringBuilder builder = new StringBuilder();
using (TextWriter writer = new StringWriter(builder))
{
    xdoc.Save(writer);
}
Console.WriteLine(builder);

Update: I've noticed, that StringWriter spoils encoding. So one more option is to do so:

string docWithDeclaration = xdoc.Declaration + xdoc.ToString();
like image 182
IDeveloper Avatar answered Oct 12 '22 23:10

IDeveloper