public static void SaveTo(string filePath)
{
using (XmlWriter writer = XmlWriter.Create(filePath, new XmlWriterSettings {Indent = true}))
{
writer.WriteStartDocument();
writer.WriteStartElement("PeriodicTable");
foreach (var element in _elements.Values.Where(element => element.Isotopes.Count > 0).GroupBy(element => element.Name).Select(g => g.First()))
{
writer.WriteStartElement("Element");
writer.WriteAttributeString("Name", element.Name);
writer.WriteAttributeString("Symbol", element.AtomicSymbol);
writer.WriteAttributeString("AtomicNumber", element.AtomicNumber.ToString("N", CultureInfo.CurrentCulture));
writer.WriteAttributeString("AverageMass", element.AverageMass.ToString("R", CultureInfo.CurrentCulture));
writer.WriteAttributeString("ValenceElectrons", element.ValenceElectrons.ToString("N", CultureInfo.CurrentCulture));
foreach (var isotope in element.Isotopes.Values)
{
writer.WriteStartElement("Isotope");
writer.WriteAttributeString("Id", isotope.UniqueId.ToString("N", CultureInfo.CurrentCulture));
writer.WriteAttributeString("Mass", isotope.AtomicMass.ToString("R", CultureInfo.CurrentCulture));
writer.WriteAttributeString("MassNumber", isotope.MassNumber.ToString("N", CultureInfo.CurrentCulture));
writer.WriteAttributeString("Abundance", isotope.RelativeAbundance.ToString("R", CultureInfo.CurrentCulture));
writer.WriteEndElement(); // Isotope
}
writer.WriteEndElement(); // Element
}
writer.WriteEndElement(); // PeriodicTable
}
}