/// <summary> /// 获取topic中的markers /// </summary> /// <param name="topic">topic's XElement</param> /// <returns>markers列表</returns> public List <XMindMarker> GetTopicMarkers(XElement topic) { // Get topic marker-refs tag: XElement marker_refs = topic.Elements().Where(w => w.Name.ToString().EndsWith("marker-refs")).FirstOrDefault(); if (marker_refs == null) { return(new List <XMindMarker>()); } // Get topic marker_ref tag: List <XElement> marker_ref_elements = marker_refs.Elements().Where(w => w.Name.ToString().EndsWith("marker-ref")).ToList(); if (marker_ref_elements.Count <= 0) { return(new List <XMindMarker>()); } List <XMindMarker> markers = new List <XMindMarker>(); foreach (XElement marker_ref in marker_ref_elements) { XAttribute marker_id = marker_ref.Attributes().Where(w => w.Name == "marker-id").FirstOrDefault(); if (marker_id == null) { return(new List <XMindMarker>()); } // 获取特性对应XMindMarkers: FieldInfo[] fieldinfo = typeof(XMindMarker).GetFields(); foreach (var fi in fieldinfo) { var att = Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute), false); if (att != null) { DescriptionAttribute des = (DescriptionAttribute)att; if (des.Description == marker_id.Value) { XMindMarker marker = (XMindMarker)Enum.Parse(typeof(XMindMarker), fi.Name); markers.Add(marker); } } } } return(markers); }
/// <summary> /// Add a marker to an existing topic. Refer XMindMarkers enum for available markers. /// </summary> /// <param name="topicId">Id of topic to add marker to</param> /// <param name="marker">Marker type. Refer XMindMarkers enum</param> public void AddMarker(string topicId, XMindMarker marker) { XElement topic = GetTopic(topicId); if (topic == null) { throw new InvalidOperationException("Topic not found!"); } // Get topic marker-refs tag, if not exist create: XElement marker_refs = topic.Descendants().Where(w => w.Name.ToString().EndsWith("marker-refs")).FirstOrDefault(); if (marker_refs == null) { marker_refs = new XElement(_defaultContentNS + "marker-refs"); topic.Add(marker_refs); } // Get topic marker_ref tag, if not exist create: XElement marker_ref = marker_refs.Descendants().Where(w => w.Name.ToString().EndsWith("marker-ref")).FirstOrDefault(); if (marker_ref == null) { marker_ref = new XElement(_defaultContentNS + "marker-ref"); marker_refs.Add(marker_ref); } XAttribute att = marker_ref.Attributes().Where(w => w.Name == "marker-id").FirstOrDefault(); if (att != null) { marker_ref.Attributes("marker-id").Remove(); } var enumField = marker.GetType().GetFields().Where(field => field.Name == marker.ToString()).FirstOrDefault(); DescriptionAttribute[] a = (DescriptionAttribute[])enumField.GetCustomAttributes(typeof(DescriptionAttribute), false); marker_ref.Add(new XAttribute("marker-id", a[0].Description)); }