Pedram
Pedram

Reputation: 728

Creating efficient code for generating xml with xdocument

I am generating an XML file using Xdocument,however,the code I am producing is not efficient(too much new objects in my code). I was wondering if you could tell me what parts of my code need to be changed.

 XDocument doc = new XDocument();

        foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("TEXTAREA"))
        {
            doc.Add(new XElement("Item", new XElement("GUID", el.Id), new XElement("Type",
                (el.GetAttribute("type").ToUpper())), new XElement("Title", el.GetAttribute("title")), new XElement("Name", el.Name),
                new XElement("Value", el.GetAttribute("value")), new XElement("MaxLength", el.GetAttribute("maxlength"))));                
            xmlcontents += Convert.ToString(doc.Document) + "\r\n";
        }

As you can see,I have used many new xElements. Is there any way to get rid of XElements?

Upvotes: 0

Views: 225

Answers (1)

Martin Honnen
Martin Honnen

Reputation: 167726

If you use an XmlWriter over a StringWriter you can use e.g.

string xml;

using (StringWriter sw = new StringWriter())
{
  using (XmlWriter xw = XmlWriter.Create(sw, new XmlWriterSettings() { Indent = true }))
  {
    xw.WriteStartDocument();
    xw.WriteStartElement("Root");
    foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("TEXTAREA"))
    {
      xw.WriteStartElement("Item");
      xw.WriteElementString("GUID", el.Id);
      xw.WriteElementString("Type", el.GetAttribute("type").ToUpper());
      // write further elements the same way
      xw.WriteEndElement();
    }
    xw.WriteEndElement();
    xw.WriteEndDocument();
  }
  xml = sw.ToString();
}

Upvotes: 1

Related Questions