示例:只需保留颜色属性。
鉴于:
<span style="margin-left: 2em;color: #008000;font-size:14px;">some text</span>
输出:
<span style="color: #008000;">some text</span>
答案 0 :(得分:1)
这个答案是在假设使用JavaScript的基础上编写的。虽然这个答案仍然有用(在这个假设下),但语言已被指定为C#。所以这个答案已经不正确了。
鉴于HTML:
<span style="margin-left: 2em;color: #008000;font-size:14px;">some text</span>
以下JavaScript应该有效(目前未经测试):
var spans = document.getElementsByTagName('span'),
color;
for (var i=0,len=spans.length;i<len;i++){
color = spans[i].style.color;
spans[i].removeAttribute('style');
spans[i].style.color = color;
}
答案 1 :(得分:1)
以下是使用Xml.Linq的解决方案草图:
XElement Load(string xml)
{
using (var reader = new StringReader(xml))
return XElement.Load(reader);
}
string ProcessStyles(string input)
{
var root = Load(input);
var allElements = root.Descendants();
var styleAttributes = allElements.Select(e => e.Attribute(XName.Get("style"))).Where(a => a != null);
foreach (var styleAttribute in styleAttributes)
{
var value = styleAttribute.Value;
var newValue = ProcessCss(value);
styleAttribute.SetValue(newValue);
}
return root.ToString();
}
string ProcessCss(string value)
{
var cssTokens = value.Split(';').Select(t => t.Trim());
// implement your filtering rules here
var filtered = cssTokens.Where(t => t.StartsWith("color"));
return String.Join(";", filtered);
}
解决方案假设“style”属性的某种结构。它不适用于更复杂的CSS(例如带注释)。
另请注意,输入字符串必须是格式良好的XML文档。 (HTML5通常不必是格式良好的XML)。
答案 2 :(得分:0)
如果您确实想使用正则表达式来完成这项工作,请参阅以下代码片段;但我仍然建议您使用style
对象处理此问题。
搜索style=\"[^\"]*?([cC]olor:\s#[0-9a-fA-F]{1,6};?)[^\"]*?\"
替换为style="$1"