/// <summary> /// Определение индекса последнего символа ">" в двойном теге. Применяется после метода GetTagBounds(). /// </summary> /// <param name="html"> /// /// </param> public void ShiftLastIndex(ref string _html) { MatchCollection openTags; // массив открывающих тегов MatchCollection closeTags; // массив закрывающих тегов tagPairs.Clear(); _html = string.Empty; if (TagName != string.Empty && !TagName.Equals("img", StringComparison.OrdinalIgnoreCase) && !TagName.Equals("br", StringComparison.OrdinalIgnoreCase)) { openTags = Regex.Matches(html, "<" + TagName + @"[^>]*>", RegexOptions.IgnoreCase); closeTags = Regex.Matches(html, "</" + TagName + ">", RegexOptions.IgnoreCase); // Заполняет массив пар тегов. if (openTags.Count > 0) { // Начинает с первого закрывающего тега. for (var i = 0; i < closeTags.Count; i++) { var tp = new TagPair { CloseTag = closeTags[i].ToString(), CloseTagStartIndex = closeTags[i].Index, CloseTagLastIndex = (closeTags[i].Index + closeTags[i].Length - 1) }; // Идём навстречу с последнего открывающего. for (var j = openTags.Count - 1; j >= 0; j--) { // Когда находит первый открывающий тег, индекс которого меньше данного закрывающего. if (closeTags[i].Index > openTags[j].Index) { // Если открывающий тег не добавлен в другую пару. if (!TagPairsContains(openTags[j].Index, openTags[j].ToString())) { tp.OpenTag = openTags[j].ToString(); tp.OpenTagStartIndex = openTags[j].Index; tp.OpenTagLastIndex = openTags[j].Index + openTags[j].Length - 1; tagPairs.Add(tp); break; } } } if ((tagPairs.Count == openTags.Count) | (tagPairs.Count == openTags.Count)) { break; } } } foreach (var tp in tagPairs) { if (tp.OpenTagStartIndex == OpenTagStartIndex) { CloseTagStartIndex = tp.CloseTagStartIndex; CloseTagLastIndex = tp.CloseTagLastIndex; } } _html = html; } else { CloseTagStartIndex = OpenTagStartIndex; CloseTagLastIndex = OpenTagLastIndex; _html = html; } }
/// <summary> /// Определение индекса последнего символа ">" в двойном теге. Применяется после метода GetTagBounds() /// </summary> /// <param name="html"> /// /// </param> public void ShiftLastIndex(ref string html) { MatchCollection openTags; // массив открывающих тегов MatchCollection closeTags; // массив закрывающих тегов tagPairs.Clear(); html = string.Empty; if (tagName != string.Empty && !tagName.Equals("img", StringComparison.OrdinalIgnoreCase) && !tagName.Equals("br", StringComparison.OrdinalIgnoreCase)) { openTags = Regex.Matches(htmlText, "<" + tagName + @"[^>]*>", RegexOptions.IgnoreCase); //openTags = Regex.Matches(htmlText, "<" + tagName + @"(.*?)+>", RegexOptions.IgnoreCase); closeTags = Regex.Matches(htmlText, "</" + tagName + ">", RegexOptions.IgnoreCase); // заполняем массив пар тегов if (openTags.Count > 0) { // начинаем с первого закрывающего тега for (int i = 0; i < closeTags.Count; i++) { TagPair tp = new TagPair(); tp.CloseTag = closeTags[i].ToString(); tp.CloseTagStartIndex = closeTags[i].Index; tp.CloseTagLastIndex = closeTags[i].Index + closeTags[i].Length - 1; // идём навстречу с последнего открывающего for (int j = openTags.Count - 1; j >= 0; j--) { // когда находим первый открывающий тег, индекс которого меньше данного закрывающего if (closeTags[i].Index > openTags[j].Index) { // если открывающий тег не добавлен в другую пару if (!TagPairsContains(openTags[j].Index, openTags[j].ToString())) { tp.OpenTag = openTags[j].ToString(); tp.OpenTagStartIndex = openTags[j].Index; tp.OpenTagLastIndex = openTags[j].Index + openTags[j].Length - 1; tagPairs.Add(tp); break; } // if (!TagPairsContains(... } // if (closeTags[i].Index ... } // for (int j = ... if ((tagPairs.Count == openTags.Count) | (tagPairs.Count == openTags.Count)) { break; } // if ((tagPairs.Count == ... } // for (int i = 0; ... } // if (openTags.Count > 0) foreach (TagPair tp in tagPairs) { if (tp.OpenTagStartIndex == openTagStartIndex) { closeTagStartIndex = tp.CloseTagStartIndex; closeTagLastIndex = tp.CloseTagLastIndex; } // if (tp.OpenTagStartIndex... } // foreach (TagPair tp in tagPairs) html = htmlText; } // if (tagName != string.Empty... else { closeTagStartIndex = openTagStartIndex; closeTagLastIndex = openTagLastIndex; html = htmlText; } // else } // ShiftLastIndex