从找到特定HTML标记的字符串中删除行

时间:2011-03-02 16:33:45

标签: c# .net asp.net-mvc-2 string export-to-excel

所以我有这个HTML页面,通过MVC动作导出到Excel文件。该操作实际上将呈现此部分视图,然后将具有正确格式的呈现视图导出到Excel文件。但是,在导出之前,视图的呈现方式完全呈现,并且该视图包含“导出到Excel”按钮,因此当我导出它时,按钮图像在左上角显示为红色X. Excel文件。

我可以拦截包含此HTML的字符串以在ExcelExport操作中呈现,并且它看起来像这样一个例子:

<div id="summaryInformation" >
<img id="ExportToExcel" style=" cursor: pointer;" src="/Extranet/img/btn_user_export_excel_off.gif" />
<table class="resultsGrid" cellpadding="2" cellspacing="0">
                <tr>
                    <td id="NicknameLabel" class="resultsCell">Nick Name</td>
                    <td id="NicknameValue"  colspan="3">
                        Swap
                    </td>
                </tr>
                <tr>
                    <td id="EffectiveDateLabel" class="resultsCell">
                        <label for="EffectiveDate">Effective Date</label>
                    </td>
                    <td id="EffectiveDateValue" class="alignRight">
                        02-Mar-2011
                    </td>
                    <td id ="NotionalLabel" class="resultsCell">
                        <label for="Notional">Notional</label>
                    </td>
                    <td id="NotionalValue" class="alignRight">
                        <span>
                            USD
                        </span>
                        10,000,000.00
                    </td>
                </tr>
                <tr>
                    <td id="MaturityDateLabel" class="resultsCell">
                        <label for="MaturityDate">Maturity Date</label>
                    </td>
                    <td id="MaturityDateValue" class="alignRight">
                        02-Mar-2016
                        -
                        Modified Following
                    </td>
                        <td id="TimeStampLabel" class="resultsCell">
                        Rate Time Stamp
                    </td>
                    <td id="Timestamp" class="alignRight">
                        28-Feb-2011 16:00
                    </td>
                </tr>
                <tr >
                    <td id="HolidatCityLabel" class="resultsCell"> Holiday City</td>
                    <td id="ddlHolidayCity" colspan="3">

                            New York, 
                            London
                    </td>
                </tr>
            </table>
</div>

<script>
    $("#ExportToExcel").click(function () {
        // ajax call to do the export
        var actionUrl = "/Extranet/mvc/Indications.cfc/ExportToExcel";
        var viewName = "/Extranet/Views/Indications/ResultsViews/SummaryInformation.aspx";
        var fileName = 'SummaryInfo.xls';
        GridExport(actionUrl, viewName, fileName);
    });
</script>

顶部的<img id="ExportToExcel"标记是我要为导出删除的标记。您看到的所有内容都包含在C#字符串中。我如何从字符串中删除该行,以便它不会尝试在Excel中渲染图像?

编辑:也可能有意义的是我们也不需要导出中的任何<script>,但是因为这不会出现在Excel中我认为这不是一个巨大的交易现在

4 个答案:

答案 0 :(得分:7)

删除所有img标记:

string html2 = Regex.Replace( html, @"(<img\/?[^>]+>)", @"",
    RegexOptions.IgnoreCase );

包括参考:

using System.Text.RegularExpressions;

答案 1 :(得分:0)

如果它在C#字符串中,则只需:

myHTMLString.Replace(@"<img id="ExportToExcel" style=" cursor: pointer;" src="/Extranet/img/btn_user_export_excel_off.gif" />","");

答案 2 :(得分:0)

最安全的方法是使用HTML Agility Pack读取HTML,然后编写从HTML中删除图像节点的代码。

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlString);
HtmlNode image =doc.GetElementById("ExportToExcel"]);
image.Remove();
htmlString = doc.WriteTo();

您可以使用类似的代码删除script代码和其他img代码。

答案 3 :(得分:0)

我刚刚使用这个

private string RemoveImages(string html)
        {
            StringBuilder retval = new StringBuilder();
            using (StringReader reader = new StringReader(html))
            {
                string line = string.Empty;
                do
                {
                    line = reader.ReadLine();
                    if (line != null)
                    {
                        if (!line.StartsWith("<img"))
                        {
                           retval.Append(line); 
                        }
                    }

                } while (line != null);
            }
            return retval.ToString();
        }