public Tag(Document doc, string name, string value) { this.ID = Count++; this.Name = name; this.Value = value; this.Document = doc; }
/// <summary> /// Разбор тегов /// </summary> /// <param name="str">документ</param> /// <param name="doc">объектная модель докумнета</param> /// <param name="pattern">шаблон разбора</param> private static void ParseTagsWhitoutBody(string str, Document doc, string pattern) { var matches = Regex.Matches(str, String.Format("<(?<tag>{0})\\s*(?<attr>.*?)/>", pattern), RegexOptions.IgnoreCase); foreach (Match h in matches) { var tagS = h.Groups["tag"].Value; var tag = new Tag(doc, tagS, null); ParseAttributes(tag, h.Groups["attr"].Value); Model.Current.Tags.Add(tag); } }
/// <summary> /// Разбор клучевых слов в документе /// </summary> /// <param name="str">документ</param> /// <param name="doc">объектная модель докумнета</param> private static void ParseKeywords(string str, Document doc) { var match = Regex.Match(str, "<meta name=\"keywords\" content=\"(?<content>.*?)\"\\s*?/>", RegexOptions.IgnoreCase); var keywords = match.Groups["content"].Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (var keyword in keywords) { doc.Keywords.Add(keyword.Trim()); } }
/// <summary> /// Разбор тегов /// </summary> /// <param name="str">документ</param> /// <param name="doc">объектная модель докумнета</param> /// <param name="pattern">шаблон разбора</param> private static void ParseTags(string str, Document doc, string pattern) { var matches = Regex.Matches(str, String.Format("<{0}\\s*(?<attr>.*?)>(?<value>[\\d\\D]*?)</(?<tag>{0})>", pattern), RegexOptions.IgnoreCase); foreach (Match h in matches) { var tagS = h.Groups["tag"].Value; var value = h.Groups["value"].Value.Replace("\n", "").Replace("\r", ""); var tag = new Tag(doc, tagS, value); ParseAttributes(tag, h.Groups["attr"].Value); Model.Current.Tags.Add(tag); } }
/// <summary> /// Разбор документа /// </summary> /// <param name="arr">массив байт документа</param> /// <param name="url">url документа</param> private static void ParseDocument(byte[] arr, string url) { var ss = Encoding.Default.GetString(arr); var charset = Regex.Match(ss, @"charset=(?<charset>[\w-]*)", RegexOptions.IgnoreCase).Groups["charset"].Value; if (!String.IsNullOrEmpty(charset)) ss = Encoding.GetEncoding(charset).GetString(arr); var title = Regex.Match(ss, @"<title>(?<title>[\d\D]*?)</title>", RegexOptions.IgnoreCase).Groups["title"].Value; title = title.Replace("\n", "").Replace("\r", ""); var doc = new Document(title, url); ParseTags(ss, doc, "h\\d"); ParseTags(ss, doc, "p"); ParseKeywords(ss, doc); Model.Current.documents.Add(doc); Model.Current.Documents = null; }