在某些情况下删除<br/>

时间:2013-11-07 12:37:57

标签: c# asp.net

我正在使用html templte发送邮件,如下所示。

<br />
<strong>FirstName</strong><br />
{FirstName}<br />
<br />
<strong>LastName</strong><br />
{LastName}<br />
<br />
<strong>Address</strong><br />
{Address}<br />
<br />
<strong>BirthDate</strong><br />
{BirthDate}<br />
<br />

这里我从数据库表中获取值,并用{FirstName},{LastName},{Address}和{BirthDate}替换相应的值。

现在如果数据库表中没有任何字段的值,那么我想从html模板中删除这些字段。例如,如果表中没有地址,我想删除地址 {地址} 来自模板。

我使用了以下代码:

 strContent = strContent.Replace("<strong>" + Address + "</strong><br />", " ");
 strContent = strContent.Replace("{" + Address  + "}<br />", "");

代码工作正常但它不会删除break新行。我的意思是Lastname和Birthdate之间有两个空行。那么如何删除这两个空白行。

我使用以下代码删除了断行,但它删除了所有字段中的所有断行。

  strContent = strContent.Replace("<br />", " ");

3 个答案:

答案 0 :(得分:0)

您的第二个Replace会替换"{" + Address + "}<br />",您实际上正在寻找"{" + Address + "}<br />\r\n<br />"来删除换行符和后续的<br />

答案 1 :(得分:0)

这就像非优雅的解决方案一样简单,但可能适合你的情况:

<strong><br />FirstName</strong><br />
    {FirstName}<br />

    <strong><br />LastName</strong><br />
    {LastName}<br />

    <strong><br />Address</strong><br />
    {Address}<br />

    <strong><br />BirthDate</strong><br />
    {BirthDate}<br />
    <br />

您的代码:

strContent = strContent.Replace("<strong><br />" + Address + "</strong><br />", " ");
strContent = strContent.Replace("{" + Address  + "}<br />", "");

答案 2 :(得分:0)

有几种方法可以做到这一点。 如果您更喜欢使用html模型,可以使用HTML Agility pack将HTML作为DOM使用。当然,这是一个新的API。

否则,我会看到两个选项:如果您需要更改模板,请执行一些需要调整的字符串操作,或者使用两个模板,并且是否存在地址确定要使用的模板。

如果您决定使用字符串操作,那么我建议在HTML模板中添加一些标记,以便于查找每个字段的起点和终点:

<br />
<strong>FirstName</strong><br />
{FirstName}<br />
<br />
<strong>LastName</strong><br />
{LastName}<br />
<br />
<div id="addressField">
    <strong>Address</strong><br />
    {Address}<br />
    <br />
</div>
<strong>BirthDate</strong><br />
{BirthDate}<br />
<br />

然后你可以这样做:     

int addressStartIdx = strContent.IndexOf(@"<div id="addressField">");
int addressCount = strContent.Substring(addressStartIdx).IndexOf(@"</div>");
// IndexOf gives the position of the first character of the string,
// so we need to account for the rest of the string
addressCount += @"</div>".Length;     

strContent = strContent.Remove(addressStartIdx, addressCount);

但这比CodeCaster的回答更为复杂。