コード例 #1
0
        /// <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;
        }
コード例 #2
0
ファイル: TaskManager.cs プロジェクト: heniu75/RoboMirror
        /// <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);
        }
コード例 #3
0
ファイル: Log.cs プロジェクト: heniu75/RoboMirror
        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);
        }
コード例 #4
0
ファイル: Log.cs プロジェクト: heniu75/RoboMirror
        /// <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);
            }
        }
コード例 #5
0
ファイル: TaskManager.cs プロジェクト: heniu75/RoboMirror
 /// <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));
 }