2013-11-17 2 views
0

У меня есть @Html.Raw(Model.Content) на странице бритвы, я хочу извлечь выдержку (обычный текст), усеченный на границе слова, рядом с 232-240 символами, а затем .... Есть ли помощник для всего этого?Извлечь текст из текста HTML

Нечто, эквивалентное Ruby on Rail's truncate_html gem. Использование:

strip_tags(truncate_html(my_model.content, :length => 240, :omission => '...')) 

ответ

0

Вы можете создать свой собственный метод, как показано в этом примере, где мы создаем его как расширение. Затем вы можете использовать его так: «Строка с большим количеством текста» .TrimString (11); Выход будет «String with ...»

Вы должны иметь возможность добавлять логику, чтобы не сломаться в слове.

public static string TrimString(this string text, int length = 300) 
{ 
    if (text.Length > length) 
    { 
     return text.Substring(text.Length - (length - 3)) + "..."; 
    } 

    return text; 
} 
+0

я действительно нашел еще один пост на StackOverflow, что ответы на этот вопрос тоже. http://stackoverflow.com/questions/1613896/truncate-string-on-whole-words-in-net-c-sharp?rq=1 Чтобы реализовать что-то подобное в расширении выше, вы можете просто проверить получить последний индекс пространства после выполнения начальной обрезки. – raf

3

решаемые его с этим расширения методами:

public static string TruncateHtml(this string input, int length = 300, 
            string ommission = "...") 
{ 
    if (input == null || input.Length < length) 
     return input; 
    int iNextSpace = input.LastIndexOf(" ", length); 
    return string.Format("{0}" + ommission, input.Substring(0, (iNextSpace > 0) ? 
                  iNextSpace : length).Trim()); 
} 

public static string StripTags(this string markup) 
{ 
    try 
    { 
     StringReader sr = new StringReader(markup); 
     XPathDocument doc; 
     using (XmlReader xr = XmlReader.Create(sr, 
          new XmlReaderSettings() 
          { 
           ConformanceLevel = ConformanceLevel.Fragment 
           // for multiple roots 
          })) 
     { 
      doc = new XPathDocument(xr); 
     } 

     return doc.CreateNavigator().Value; // .Value is similar to .InnerText of 
              // XmlDocument or JavaScript's innerText 
    } 
    catch 
    { 
     return string.Empty; 
    } 
} 

Использование:

@Html.Raw(Model.Content.StripTags().TruncateHtml(240, "...")) 
Смежные вопросы