我陷入了棘手的情况,我在c#中有html标签的字符串:
字符串strhtml =" <span style="font-size: 10px;">Hi This is just a section of html text.</span><span style="font-family: 'Verdana'; font-size: 10px;">Please help</span><span>me add style attributes to span tags.Thank You</span>
";
如您所见,有两个跨度标签,而没有" font-family:'verdana';"。我需要一些可以帮助我在这两个跨度标签中添加字体家庭的东西,因此所需的结果就是这样:
" <span style="font-size: 10px;font-family: 'Verdana';">Hi This is just an example of html text.</span><span style="font-family: 'Verdana'; font-size: 10px;">Please help<span style="font-family: 'Verdana';">me add style attributes to span tags.Thank You</span>
"
我知道我可以在字符串开头添加另一个跨度标签,但这是我不想做的。任何帮助将不胜感激。
编辑:我尝试使用Regex.Replace方法数小时。但是我只是无法获得正确的输出。
在没有正直的情况下这样做的一种方法是使用htmlagilitypack库和递归功能:
public void SetFonts()
{
string strHtml = "<span style="font-size: 10px; ">Hi This is just a section of html text.</span><span style="font-family: 'Verdana'; font-size: 10px; ">Please help</span><span>me add style attributes to span tags.Thank You</span>";
HtmlDocument document = new HtmlDocument();
document.LoadHtml(strHtml);
SetFonts(document.DocumentNode);
document.Save(Console.Out);
}
public void SetFonts(HtmlNode node)
{
foreach (var item in node.Elements("span"))
{
var style = item.GetAttributeValue("style", null);
if (style != null)
{
if (!style.Contains("font-family"))
{
var newValue = style + "font-family: 'Verdana';";
item.SetAttributeValue("style", newValue);
}
}
SetFonts(item);
}
}
结果:
<span style="font-size: 10px; font-family: 'Verdana';">Hi This is just a section of html text.</span><span style="font-family: 'Verdana'; font-size: 10px; ">Please help</span><span>me add style attributes to span tags.Thank You</span>
请注意,这根本没有任何样式的目标跨度标签。如果需要,您可以修改它。
您可以从Nuget下载htmlagilitypack库。