/// <summary> /// extracts expenditures from xml file found at xmlFilePath based on format of an entryTemplate. There are 6 extraction /// types - 0: dominant tag, 1: associated tags, 2: people, 3: date, 4: expenditure, 5: xmlID /// </summary> //internal static List<IExpenditureEntry> ExtractExpendituresFromXml(IExpenditureEntry entryTemplate, string xmlFilePath, // int extractionType) //{ // List<IExpenditureEntry> entries = new List<IExpenditureEntry>(); // XmlDocument doc = new XmlDocument(); // doc.Load(xmlFilePath); // foreach (XmlNode node in doc.ChildNodes) // { // if (node.Name == "Expenditures") // { // foreach (XmlNode IExpenditureEntry in node.ChildNodes) // { // if (IExpenditureEntry.Name != "LatestID") // { // switch (IExpenditureEntry.Attributes[0].Value) // For version compatibility // { // case "1": // IExpenditureEntry entry = ReadData(IExpenditureEntry); // switch (extractionType) // { // case 0: // Base on Dominant Tag // if (entry.dominantTag == entryTemplate.dominantTag) // { // entries.Add(entry); // } // break; // case 1: // Base on Associated Tags // foreach (string tag in entryTemplate.associatedTags) // { // if (entry.associatedTags.Contains(tag)) // { // entries.Add(entry); // } // } // break; // case 2: // Base on People // foreach (string person in entryTemplate.people) // { // if (entry.people.Contains(person)) // { // entries.Add(entry); // } // } // break; // case 3: // Base on Date // if (entry.date.IsTheSameDateAs(entryTemplate.date)) // { // entries.Add(entry); // } // break; // case 4: // Base on Expenditure // break; // case 5: // Base on ID // break; // default: // break; // } // break; // default: // break; // } // } // } // } // } // return entries; //} internal List <IExpenditureEntry> ExtractAllExpendituresFromXml() { List <IExpenditureEntry> entries = new List <IExpenditureEntry>(); XmlDocument doc = new XmlDocument(); doc.Load(xmlFilePath); foreach (XmlNode node in doc.ChildNodes) { if (node.Name == "Expenditures") { foreach (XmlNode IExpenditureEntry in node.ChildNodes) { if (IExpenditureEntry.Name != "LatestID") { switch (IExpenditureEntry.Attributes[0].Value) // For version compatibility { case "1": IExpenditureEntry entry = ReadData(IExpenditureEntry); entries.Add(entry); break; default: break; } } } } } return(entries); }
public void RecordExpenditureData(IExpenditureEntry expenditureEntry) { if (File.Exists(xmlFilePath)) { UpdateXmlFile(expenditureEntry, xmlFilePath); } else { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.CheckCharacters = true; CreateXmlFile(expenditureEntry, settings, xmlFilePath); } }
internal static void CreateXmlFile(IExpenditureEntry expenditureEntry, XmlWriterSettings settings, string xmlFilePath) { using (XmlWriter writer = XmlWriter.Create(xmlFilePath, settings)) { writer.WriteStartDocument(); writer.WriteStartElement("Expenditures"); writer.WriteStartElement("LatestID"); writer.WriteElementString("LatestID", "0"); writer.WriteEndElement(); writer.WriteEndDocument(); } UpdateXmlFile(expenditureEntry, xmlFilePath); }
internal static void UpdateXmlFile(IExpenditureEntry expenditureEntry, string xmlFilePath) { string currentVersion = "1"; //Change when change xml! XmlDocument doc = new XmlDocument(); doc.Load(xmlFilePath); latestID = latestID + 1; foreach (XmlNode node in doc.ChildNodes) { if (node.Name == "Expenditures") { CreateNewEntry(doc, node, currentVersion, expenditureEntry); node.ChildNodes[0].InnerText = latestID.ToString(); } } doc.Save(xmlFilePath); }
private static void CreateNewEntry(XmlDocument doc, XmlNode node, string currentVersion, IExpenditureEntry entry) { XmlElement newExpenditureEntry = doc.CreateElement("ExpenditureEntry"); XmlAttribute versionNumber = doc.CreateAttribute("version"); versionNumber.Value = currentVersion; newExpenditureEntry.Attributes.Append(versionNumber); XmlElement iDElement = doc.CreateElement("ID"); iDElement.InnerText = latestID.ToString(); XmlElement dominantTag = doc.CreateElement("DominantTag"); dominantTag.InnerText = entry.dominantTag; XmlElement associatedTags = doc.CreateElement("AssociatedTags"); foreach (string tag in entry.associatedTags) { XmlElement asTag = doc.CreateElement("Tag"); asTag.InnerText = tag; associatedTags.AppendChild(asTag); } XmlElement people = doc.CreateElement("People"); foreach (string person in entry.people) { XmlElement p = doc.CreateElement("Person"); p.InnerText = person; people.AppendChild(p); } XmlElement expenditure = doc.CreateElement("Expenditure"); expenditure.InnerText = entry.expenditure.ToString("0.00"); XmlElement newExpenditureDate = doc.CreateElement("Date"); XmlElement newExpenditureDay = doc.CreateElement("Day"); newExpenditureDay.InnerText = entry.date.day.ToString("00"); XmlElement newExpenditureMonth = doc.CreateElement("Month"); newExpenditureMonth.InnerText = entry.date.month.ToString("00"); XmlElement newExpenditureYear = doc.CreateElement("Year"); newExpenditureYear.InnerText = entry.date.year.ToString(); newExpenditureDate.AppendChild(newExpenditureDay); newExpenditureDate.AppendChild(newExpenditureMonth); newExpenditureDate.AppendChild(newExpenditureYear); newExpenditureEntry.AppendChild(iDElement); newExpenditureEntry.AppendChild(dominantTag); newExpenditureEntry.AppendChild(associatedTags); newExpenditureEntry.AppendChild(people); newExpenditureEntry.AppendChild(expenditure); newExpenditureEntry.AppendChild(newExpenditureDate); node.AppendChild(newExpenditureEntry); }