IMO, using StringBuilder directly is a fairly sure way of introducing
an occasional bug... all you need is a reserved xml character in either
the key or value, and it's broken. That's way too brittle for my
liking.
You can, however, do something like below; fairly hard to break this
via content... also, note that the order of items is not guaranteed by
Hashtable
Marc
Hashtable ht = new Hashtable();
ht.Add("Test", "Something");
ht.Add("Whatever", "abcf");
ht.Add("asd", "adsfgaa");
StringBuilder sb = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(sb))
{
writer.WriteStartElement("items");
foreach (DictionaryEntry item in ht)
{
writer.WriteStartElement("item");
writer.WriteAttributeString("key",
item.Key.ToString());
writer.WriteValue(item.Value);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.Flush();
}
Console.WriteLine(sb.ToString());