/// <summary> /// 获取二个SVN库或者标签之间的差异 /// </summary> /// <param name="url1"></param> /// <param name="url2"></param> /// <returns></returns> public List <DiffFile> GetDiff(string url1, string url2, string username = "", string password = "", string path = "", Func <string, string> fun = null) { var command = string.Format(SVNDiffCommand, _svnFileName, CreateLoginInfo(username, password), url1, url2); //执行查异化命令 var result = RunSvnCommand(path, command, fun); var index = result.IndexOf("<?xml"); var end = result.IndexOf("</diff>") - index + 7; var diffs = new List <DiffFile>();//差异集合 if (index >= 0 && end > 0) { var xmldoc = result.Substring(index, end);//截取XML var xmlwr = new IO.XmlHelper(); xmlwr.LoadXmlString(xmldoc); //获取需要的path节点信息 var nodes = xmlwr.GetNodeListByDelegate(delegate(System.Xml.XmlNode xn) { return(xn.Name.Equals("path", StringComparison.CurrentCultureIgnoreCase) && xn.ParentNode != null && xn.ParentNode.Name.Equals("paths", StringComparison.CurrentCultureIgnoreCase)); }); if (nodes != null) { foreach (System.Xml.XmlNode cn in nodes) { var df = new DiffFile(); var item = IO.XmlHelper.ReadAttributeValue(cn, "item");//获取类型 if (!string.IsNullOrWhiteSpace(item)) { switch (item.ToLower().Trim()) { case "added": { df.DiffType = DiffFile.EnumDiff.Add; break; } case "modified": { df.DiffType = DiffFile.EnumDiff.Update; break; } case "deleted": { df.DiffType = DiffFile.EnumDiff.Delete; break; } } } var kind = IO.XmlHelper.ReadAttributeValue(cn, "kind");//获取文件类型file or dir df.FileType = (DiffFile.EnumFileType)Enum.Parse(typeof(DiffFile.EnumFileType), kind, true); df.Url = cn.InnerText; diffs.Add(df); } } } return(diffs); }
/// <summary> /// 通过RSS内容获取整个信息 /// </summary> /// <param name="rssContent">内容</param> /// <returns></returns> protected void FromRss(string rssContent) { var xmlwr = new IO.XmlHelper();//读取器 xmlwr.LoadXmlString(rssContent); this.Title = GetNodeValue("title", "channel", xmlwr); this.Description = GetNodeValue("description", "channel", xmlwr); this.Docs = GetNodeValue("docs", "channel", xmlwr); this.Generator = GetNodeValue("generator", "channel", xmlwr); this.Language = GetNodeValue("language", "channel", xmlwr); this.Link = GetNodeValue("link", "channel", xmlwr); this.ManagingEditor = GetNodeValue("managingeditor", "channel", xmlwr); this.WebMaster = GetNodeValue("WebMaster", "channel", xmlwr); //获取子项 var nodes = xmlwr.GetNodeListByDelegate(delegate(XmlNode xn) { return(xn.Name.Equals("item", StringComparison.CurrentCultureIgnoreCase)); }); Items.Clear(); foreach (var xn in nodes) { if (xn.ChildNodes != null) { var item = new RssItem(); foreach (XmlNode chn in xn.ChildNodes) { switch (chn.Name.ToLower()) { case "title": { item.Title = chn.InnerText; break; } case "link": { item.Link = chn.InnerText; break; } case "description": { item.Description = chn.InnerText; break; } case "author": { item.Author = chn.InnerText; break; } case "comments": { item.Comments = chn.InnerText; break; } case "pubdate": { DateTime dt; if (DateTime.TryParse(chn.InnerText, out dt)) { item.PubDate = dt; } break; } case "category": { item.Cagtegory = chn.InnerText; break; } case "guid": { item.Guid = chn.InnerText; break; } } } Items.Add(item); } } }