예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
                }
            }
        }