如何更新 HTML 样式属性
How to Update HTML Style Attribute
我有一个 c# .net core 2.2 应用程序,我正在尝试解析 HTML 页面并编辑一些样式属性。
我正在使用 HTML 敏捷包
在我的 HTML 中,我有一个具有多种样式的 Id。
<td id="bannerTop" class="alert alert-warning" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; color: #fff; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; background-color: #FF9F00; margin: 0; padding: 20px;" align="center" bgcolor="#FF9F00" valign="top">
我想调用此元素 "bannerTop" 并编辑样式 background-color
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(selectedTemplate.HtmlTemplateString);
var bannerTop = htmlDoc.GetElementbyId("bannerTop");
bannerTop.Attributes["style"].Value = "background-color: #0000FF";
但这会覆盖所有样式属性,我怎样才能只编辑其中一个?我是否需要手动解析 bannerTop.Attributes["style"]
returns 的字符串,或者是否有更简单的方法让 HTML Agility Pack 允许编辑单个样式?
您需要从属性中抓取样式,然后遍历它们以手动更改样式的特定项。
我会在“;”上分裂然后 ":" 得到 name/value 对。遍历它们,将名称小写并更改值(如果匹配 bgcolor
)。否则,将原始值附加到 newStyles
。
var bannerTop = htmlDoc.GetElementbyId("bannerTop");
string oldStyle = bannerTop.Attributes["style"].Value;
string newStyles = "";
foreach (var entries in oldStyle.Split(';'))
{
var values = entries.Split(':');
if (values[0].ToLower() == "bgcolor")
{
values[1] = "#0000FF";
newStyles += String.Join(':', values) + ";";
}
else
{
newStyles += entries + ";";
}
}
bannerTop.Attributes["style"].Value = newStyles;
我有一个 c# .net core 2.2 应用程序,我正在尝试解析 HTML 页面并编辑一些样式属性。
我正在使用 HTML 敏捷包
在我的 HTML 中,我有一个具有多种样式的 Id。
<td id="bannerTop" class="alert alert-warning" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; color: #fff; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; background-color: #FF9F00; margin: 0; padding: 20px;" align="center" bgcolor="#FF9F00" valign="top">
我想调用此元素 "bannerTop" 并编辑样式 background-color
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(selectedTemplate.HtmlTemplateString);
var bannerTop = htmlDoc.GetElementbyId("bannerTop");
bannerTop.Attributes["style"].Value = "background-color: #0000FF";
但这会覆盖所有样式属性,我怎样才能只编辑其中一个?我是否需要手动解析 bannerTop.Attributes["style"]
returns 的字符串,或者是否有更简单的方法让 HTML Agility Pack 允许编辑单个样式?
您需要从属性中抓取样式,然后遍历它们以手动更改样式的特定项。
我会在“;”上分裂然后 ":" 得到 name/value 对。遍历它们,将名称小写并更改值(如果匹配 bgcolor
)。否则,将原始值附加到 newStyles
。
var bannerTop = htmlDoc.GetElementbyId("bannerTop");
string oldStyle = bannerTop.Attributes["style"].Value;
string newStyles = "";
foreach (var entries in oldStyle.Split(';'))
{
var values = entries.Split(':');
if (values[0].ToLower() == "bgcolor")
{
values[1] = "#0000FF";
newStyles += String.Join(':', values) + ";";
}
else
{
newStyles += entries + ";";
}
}
bannerTop.Attributes["style"].Value = newStyles;