0

私は現在、私たちが持っているメッセージウォッチャーサービスに取り組んでおり、私の仕事は単にメッセージの詳細をメッセージ本文に埋め込むことです。

これに文字列ビルダーを使用してみましたが、メッセージ本文がhtmlベースの文字列であることがわかりました。

このhtml文字列の特定の時点で追加したい値を追加できる方法があるかどうか知りたいですか?

以下は、操作したいhtml文字列のセクションです。テキストはbodyタグの直後に挿入する必要があります。

 <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の値を1行に出力してから、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本文(上記のものだけでなく)を処理する必要がある場合は、タグの後にテキストを挿入するなど、一見単純な操作であっても、HTMLAgilityPackなどの適切なHTMLパーサーを使用することを強くお勧めします。body

于 2011-07-08T14:10:45.763 に答える