/// <inheritdoc /> public override void Push(string xpath, string xmlNamespace = null, string prefix = "", int index = -1) { PushNamespace(xmlNamespace, prefix); xpath = QualifyXPath(xpath, prefix, xmlNamespace, index); pathStack.Push(Tuple.Create(xpath, index)); XElement q; List <XElement> nodes = null; if (elementStack.Count == 0) { q = (from x in RootElement.Elements(xpath) select x).FirstOrDefault(); } else if (CurrentElement == null) { q = null; } else if (index == -1) { q = (from x in CurrentElement.Elements(xpath) select x).FirstOrDefault(); } else { // Get the collection and work out which one we want. nodes = XElements(xpath); q = index > nodes.Count ? null : nodes[index - 1]; } elementStack.Push(CurrentElement); CurrentElement = q; CurrentNodes = nodes; }
/// <summary>Loads all tasks from the XML file.</summary> public List <MirrorTask> LoadTasks() { var tasks = new List <MirrorTask>(); foreach (var element in RootElement.Elements("task")) { tasks.Add(MirrorTask.Deserialize(element)); } return(tasks); }
private XElement GetTaskElement(string taskGuid, bool create) { var element = RootElement.Elements("task").SingleOrDefault( e => e.Attribute("guid").Value == taskGuid); if (element == null && create) { element = new XElement("task"); element.SetAttributeValue("guid", taskGuid); RootElement.Add(element); } return(element); }
/// <exception cref="FileLockedException"></exception> private Log(bool readOnly) : base(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), PATH), "log", readOnly) { // upgrade to new format: // move /log/entry elements to /log/task[@guid=...]/entry var flatEntries = RootElement.Elements("entry"); foreach (var e in flatEntries) { e.Remove(); string taskGuid = e.Attribute("taskGuid").Value; e.SetAttributeValue("taskGuid", null); var taskElement = GetTaskElement(taskGuid, create: true); taskElement.Add(e); } }
/// <summary> /// Returns the specified task's element in the XML document or null /// if there is no matching element. /// </summary> /// <param name="guid">GUID of the task.</param> private XElement GetTaskElement(string guid) { return(RootElement.Elements("task").SingleOrDefault(e => e.Attribute("guid").Value == guid)); }