0

我目前正在开发我们拥有的消息观察服务,我的任务是将消息详细信息简单地嵌入消息正文中。

我已经尝试为此使用字符串生成器,但是我发现我的消息正文是基于 html 的字符串。

我想知道是否有一种方法可以在这个 html 字符串的某个点添加我想要添加的值?

下面是我要操作的 html 字符串的一部分。我的文本需要直接插入正文标记之后。

 <body lang=EN-GB link=blue vlink=purple>
   <div class=WordSection1>
     <p class=MsoNormal>
       <span style='font-size:10.0pt;font-family:"Century Gothic","sans-serif";color:black'>Another test for AppendLine();<o:p></o:p>
       </span>
     </p>

这是我尝试做的事情:

 StringBuilder sb = new StringBuilder();

            sb.Append("From: ");
            sb.Append(message.From.ToString());
            sb.AppendLine();
            sb.Append("Sent: ");
            sb.Append(message.Date.ToString());
            sb.AppendLine();
            sb.Append("To: ");
            sb.Append(message.To.ToString());
            sb.AppendLine();
            sb.Append("Subject: ");
            sb.Append(message.Subject);
            sb.AppendLine();
            sb.Append(message.BodyHtml);

不幸的是,这只是将我的 From、Sent、To、Subject 值打印到一行,然后输出 html 部分。

如果需要更多信息,请告诉我,我会提供。

4

1 回答 1

1

试试这个正则表达式替换,而不是附加正文 HTML:

StringBuilder sb = new StringBuilder();

sb.Append("From: ");
sb.Append(message.From.ToString());
...
sb.Append("Subject: ");
sb.Append(message.Subject);
sb.AppendLine();

// not guaranteed to work with arbitrary HTML strings
Regex regex = new Regex(@"(<body[^>]*>)", RegexOptions.IgnoreCase);
message.BodyHtml = regex.Replace(message.BodyHtml, "$1\r\n" + sb.ToString());

免责声明:请注意,使用正则表达式处理 HTML通常被认为是一个坏主意。尽管上面的代码可能在 98% 的情况下都有效,但正则表达式无法胜任解析任意 HTML 的任务。HTML 对于正则表达式来说太复杂了。如果您需要处理任意 HTML 正文(不仅仅是上面的那个),我强烈建议您使用适当的 HTML 解析器,例如HTML Agility Pack - 即使对于看似简单的操作,例如在body标记后插入文本也是如此。

于 2011-07-08T14:10:45.763 回答