I just finished my working code, but still want to improve it.I want to transform this input:<item>asdf</item><item>asdf</item><item>asdf</item>to this output:<string name=x1>asdf</string><string name=x2>asdf</string><string name=x3>asdf</string>My current code:   static void Main(string[] args)        {            String content;            using (StreamReader reader = new StreamReader(arrays2.xml))            {                content = reader.ReadToEnd();            }            int counter = 0;            int startIndex = 0;            while ((startIndex = content.IndexOf(<item>, startIndex)) != -1)            {                counter++;                           content = content.Substring(0, startIndex) + <string name=\rule + counter + \> + content.Substring(startIndex + 6);            }            content = content.Replace(</item>, </string>);            using (StreamWriter writer = new StreamWriter(arrays2_formatted.xml))            {                writer.Write(content);            }            Console.WriteLine(content);        }I think the bottleneck is in the content assignment within the loop, as a lot of String instance are created and thrown away.However, is there a completely different way to do this efficiently?
Manipulate XML files in c#
c#;strings;xml
Don't parse it through string manipulation, use the XML libraries in the framework.  I'd recommend LINQ to XML.  Parse it and make your changes.var xmlStr = @<root><item>asdf</item><item>asdf</item><item>asdf</item></root>;var doc = XDocument.Parse(xmlStr);         // parse from string//var doc = XDocument.Load(arrays2.xml); // or load from filevar items = doc.Descendants(item);       // find all item elementsvar index = 1;foreach (var item in items.ToList())  // ToList() required since we're modifying the document{    var name = x + index++;    var nameAttr = new XAttribute(name, name);           // create the name attribute    var value = (string)item;                              // read the value as a string    var newNode = new XElement(string, nameAttr, value); // create the new element    item.ReplaceWith(newNode);                             // replace the current one}//doc.Save(arrays2_formatted.xml); // save the changes to the file