我正在尝试编写一个C#应用程序,它将对某些CSS文件执行操作。假设您有以下CSS代码:
.ClassOne
{
color: #FFFFFF;
font-weight:normal;
font-size: 9pt;
font-family: Tahoma;
vertical-align: middle;
border: solid 1px #7F7F7F;
padding: 1px 1px 1px 1px;
background-color: #B48410;
background-position: center center;
}
.ClassTwo
{
color: #FFFFFF;
background-repeat: repeat-x;
background-color: #000000;
}
.ClassThree
{
color: #000000;
font-weight:normal;
font-size: 9pt;
font-family: Tahoma;
vertical-align: left;
border: solid 1px #F3Dc51;
padding: 1px 1px 1px 1px;
background-color: #A32DF1;
}
我想要做的是搜索文件中的特定类,比如ClassOne,然后存储适用于该类的background-color元素。这不必对CSS文件中的所有类进行,因此在上面的示例中,我可能只想存储ClassOne和ClassThree的背景颜色。
然后应用程序应该将存储的值复制到另一个具有相同类的CSS文件中。
我将知道必须执行这些操作的类。
我看过ExCSS,但我不确定如何使用它,如果它在这个实例中有用。
有人可以帮忙吗?
答案 0 :(得分:0)
这应该让你开始使用ExCss,至少在解析部分:
[Test]
public void Banana([Values (".ClassThree")] string targetClass, [Values ("#A32DF1")] string expectedColor)
{
var parser = new Parser();
var sheet = parser.Parse(sample);
var result = sheet.Rulesets
.Where(s => s.Selector.ToString() == targetClass)
.SelectMany(r => r.Declarations)
.FirstOrDefault(d => d.Name.Equals("background-color", StringComparison.InvariantCultureIgnoreCase))
.Term
.ToString();
Assert.AreEqual(expectedColor, result);
}
你最终要做的事情,也许不是使用Linq,而是循环你的css并使用与你所针对的声明匹配的声明中的值来构建一个新的css。例如,下面,这可能不是最佳效率,但可以做到这一点:
var targetClasses = new List<string> { ".ClassOne", ".ClassThree" };
var targetDecls = new List<string> { "background-color" };
var parser = new Parser();
var sheet = parser.Parse(sample);
foreach (var r in sheet.Rulesets)
{
if (targetClasses.Contains(r.Selector.ToString()))
{
Debug.WriteLine(r.Selector.ToString());
Debug.WriteLine("{");
foreach (var d in r.Declarations)
{
if (targetDecls.Contains(d.Name))
{
Debug.WriteLine("\t" + d);
}
}
Debug.WriteLine("}");
}
}