2014-01-08 2 views
1

У меня есть программа в C#, которая извлекает некоторые данные из базы данных. Данные могут содержать теги html. К сожалению, в некоторых случаях тег html закрытия LAST отсутствует символ «>».Обнаружить наличие неправильного тега HTML и исправить его

Может ли кто-нибудь помочь мне найти решение для проверки этого экземпляра неправильного html, а затем добавить конечный символ «>».

спасибо.

--- EDIT ---

Я думал о решении проблемы таким образом:

  1. Проверки для последнего совпадения </tag
  2. Проверьте, если символ после его>
  3. Если нет, добавьте>

Однако, я не знаю, что регулярное выражение, я должен нам e при 1). У кого-нибудь есть идея. Я не очень хорошо разбираюсь в регулярном выражении.

--- EDIT --- Ниже приведены некоторые примеры данных, я мог бы иметь:

hello <span class=green>Sean</span> Moore 

hello <span><span class="green">Roger</span></span 
+3

http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html – Aron

+0

У вас есть что отсутствует '>' только на последнем теге, а также в середине html-текста (по другим тегам)? –

+0

Он всегда находится в последнем теге. Однако этого не происходит для всех данных. – user3172468

ответ

0

1) Если данные имеют всеобъемлющ HTML тег:

if(Data.StartsWith("<") && !Data.EndsWith(">")) 
    Data += ">"; 

Это проверяет, является ли ваши данные html (начинаются с <) и являются неправильными (не заканчиваются >), и если это так, то добавляется >.

2) Если может быть текст вне HTML-теги:

if (Data.Contains("</") && Data.LastIndexOf(">") < Data.LastIndexOf("</")) 
{ 
    int LastTagPosition = Data.LastIndexOf("</"); 
    int LastTagEndPosition = Data.IndexOf(" ", LastTagPosition); 
    if (LastTagEndPostion < 0) 
     Data += ">"; 
    else 
     Data.Insert(LastTagEndPosition, ">"); 
} 

Это проверка кастрированный баран есть закрытие HTML-теги и есть ли > после последнего </. Если нет, то добавляется > в следующем пространстве или в конце данных, если нет места.

+0

Это не сработает.Я мог бы иметь такие данные: – user3172468

+0

привет Шон Мур – user3172468

+0

Однако, я мог бы иметь данные, как это: привет <пролет класс = «зеленый»> Roger user3172468

1

Предположительно вы получаете HTML из базы данных в виде строки, в этом случае, то EndsWith метод на строке будет выполнять работу

if(!html.EndsWith(">")) 
{ 
    html += ">"; 
} 

Это быстрый и грязный метод, чтобы ваш код растет, вы вероятно, захочет уйти от быстрых хаков. В этом отношении вы можете начать смотреть на такие вещи, как HtmlAgilityPack

Смежные вопросы