0

我正在做一个发送邮件的CLR程序,我已经将html组合成我的字符串,绑定一些动态值后我就可以发送邮件了。

但现在的问题是,我得到一个包含 HTML 的字符串,所以我想找到第一个<table>,然后改变它的宽度。它。[由于模板宽度较大,令人不安]。这是电子邮件的正文。

 string StrHtml =" <table cellspacing='1' cellpadding='10' border='0'
style='width:880px'></table>"

我想改变style='width:880px' to style='width:550px'

我只在类库中执行此代码。做这个的最好方式是什么?

我的代码是:

string ImgPath = string.Empty;
ImgPath = Convert.ToString(ds.Tables[0].Rows[i]["GroupMessage"]);
string pattern = string.Empty;
pattern = System.Text.RegularExpressions.Regex.(ImgPath, "(<table.*?>.*</table>", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Groups[1].Value;  

MailMessage message = new MailMessage();
message.AlternateViews.Add(htmlMail);
message.Body = ImgPath ; //
message.IsBodyHtml = true;
//Other mail sending code here.....
4

4 回答 4

2

你可以使用HtmlAgilityPack,像这样:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(StrHtml);

var tableNode = ( from node in htmlDoc.DocumentNode.Descendants()
                 where node.Name == "table"
                 select node ).FirstOrDefault();

if ( tableNode != null ) {
    tableNode.Attributes["style"].Value = 
        tableNode.Attributes["style"].Value.Replace("880px", "550px");
}
于 2012-11-05T10:35:41.750 回答
0

你可以这样做XDocument

    using (var reader = new StringReader(StrHtml))
    {
       var doc = XDocument.Load(reader);
       var table = doc.Descendants("table").FirstOrDefault();
       if (table != null)
       {
           var style = table.Attribute("Style");
           if (style != null)
               style.Value = "width:550px";
       }
    }
于 2012-11-05T10:37:35.473 回答
0

这有什么问题?

StrHtml = StrHtml.Replace("880px","550px");

或者这只是一个例子?抱歉,不清楚。

编辑:

使用正则表达式(使用 System.Text.RegularExpressions;):

StrHtml = Regex.Replace(StrHtml, "width:[\d]*px", "width:550px");

请注意,“width:(numbers)px”文本必须存在(并且宽度必须与正则表达式的小写字母相同),否则您将遇到异常。但是,只要用 a 包围它就可以try{StrHtml = Regex.Replace(StrHtml, "width:[\d]*px", "width:550px");}catch{}

最后的最终编辑:

您只想获取表格标签的样式宽度,我收集:

try{
StrHtml = Regex.Replace(StrHtml, @"(<table[\s\S]*)(width:[\d]*px)(.*?>)", @"$1width:550px$3");
}
catch{}
于 2012-11-05T10:38:20.290 回答
0

我正在获取以下格式的 html 字符串,我只想获取 style="width: 880px" 的属性值,它总是在变化。[这只有在样式标签中提到宽度时才有效。这就是我的情况。]

图像路径 ==>

 <table border="0" cellpadding="10" cellspacing="1" style="width: 880px">
    // some other code goes here
    </html>

答案 ==> 我在课堂上使用了正则表达式,[想从该类制作 DLL 文件]

string StrStyTag = string.Empty;
StrStyTag = System.Text.RegularExpressions.Regex.Match(ImgPath, "<table.+?style=(.+?)>", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Groups[1].Value;

我得到的值是==>“宽度:880px”,所以在做了一些字符串操作之后,我将 880px 设置为修复 550px。

感谢所有帮助我解决它的人。

于 2012-11-07T10:26:24.230 回答