public static void ExportPlayerXml(string XmlPath, int Pid, string Name)
{
// Create full path
string sPath = Path.Combine(
XmlPath,
String.Format("{0}_{1}_{2}.xml", Name.Trim().MakeFileNameSafe(), Pid, DateTime.Now.ToString("yyyyMMdd_HHmm"))
);
// Delete file if it exists already
if (File.Exists(sPath))
File.Delete(sPath);
// Create XML Settings
XmlWriterSettings Settings = new XmlWriterSettings();
Settings.Indent = true;
Settings.IndentChars = "\t";
Settings.NewLineChars = Environment.NewLine;
Settings.NewLineHandling = NewLineHandling.Replace;
// Write XML data
using (StatsDatabase Driver = new StatsDatabase())
using (XmlWriter Writer = XmlWriter.Create(sPath, Settings))
{
// Player Element
Writer.WriteStartDocument();
Writer.WriteStartElement("Player");
// Manifest
Writer.WriteStartElement("Info");
Writer.WriteElementString("Pid", Pid.ToString());
Writer.WriteElementString("Name", Name.EscapeXML());
Writer.WriteElementString("BackupDate", DateTime.Now.ToString());
Writer.WriteEndElement();
// Start Tables Element
Writer.WriteStartElement("TableData");
// Add each tables data
foreach (string Table in StatsDatabase.PlayerTables)
{
// Open table tag
Writer.WriteStartElement(Table);
// Fetch row
List<Dictionary<string, object>> Rows;
if (Table == "kills")
Rows = Driver.Query(String.Format("SELECT * FROM {0} WHERE attacker={1} OR victim={1}", Table, Pid));
else
Rows = Driver.Query(String.Format("SELECT * FROM {0} WHERE id={1}", Table, Pid));
// Write each row's columns with its value to the xml file
foreach (Dictionary<string, object> Row in Rows)
{
// Open Row tag
Writer.WriteStartElement("Row");
foreach (KeyValuePair<string, object> Column in Row)
{
if (Column.Key == "name")
Writer.WriteElementString(Column.Key, Column.Value.ToString().EscapeXML());
else
Writer.WriteElementString(Column.Key, Column.Value.ToString());
}
// Close Row tag
Writer.WriteEndElement();
}
// Close table tag
Writer.WriteEndElement();
}
// Close Tags and File
Writer.WriteEndElement(); // Close Tables Element
Writer.WriteEndElement(); // Close Player Element
Writer.WriteEndDocument(); // End and Save file
}
}