从HTML中提取纯文本摘录

时间:2013-11-17 22:22:09

标签: c# asp.net ruby-on-rails razor truncate

我在剃刀页面中有@Html.Raw(Model.Content),我想提取截断到232-240个字符附近的字边界的摘录(纯文本),然后是...。这有什么帮手吗?

相当于Ruby on Rail的truncate_html宝石。用法:

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

2 个答案:

答案 0 :(得分: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, "..."))

答案 1 :(得分: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;
}