服务器修改css,服务器端C#实现的CSS解析器

using System;

using System.Collections;

using System.Text;

using System.IO;

using System.Collections.Specialized;

using System.Text.RegularExpressions;

using System.Diagnostics;

namespace CSS

{

public class App

{

public static void Main(string[] args)

{

//初始化CSS解析器

CssDocument doc = new CssDocument();

//加载现有CSS文件

doc.Load(Directory.GetCurrentDirectory() + "/test.css");

//修改CSS

doc["body"].Attributes["font-size"] = "12px";

//保存CSS文件

doc.Save(Directory.GetCurrentDirectory() + "/a.css");

Console.Read();

}

}

public class CssParse

{

private string m_source;

private int m_idx;

public static bool IsWhiteSpace(char ch)

{

return( "\t\n\r ".IndexOf(ch) != -1 );

}

public void EatWhiteSpace()

{

while ( !Eof() )

{

if ( !IsWhiteSpace(GetCurrentChar()) )

return;

m_idx++;

}

}

public bool Eof()

{

return(m_idx>=m_source.Length );

}

public string ParseElementName()

{

StringBuilder element = new StringBuilder();

EatWhiteSpace();

while ( !Eof() )

{

if (GetCurrentChar()=='{')

{

m_idx++;

break;

}

element.Append(GetCurrentChar());

m_idx++;

}

EatWhiteSpace();

return element.ToString().Trim();

}

public string ParseAttributeName()

{

StringBuilder attribute = new StringBuilder();

EatWhiteSpace();

while ( !Eof() )

{

if (GetCurrentChar()==':')

{

m_idx++;

break;

}

attribute.Append(GetCurrentChar());

m_idx++;

}

EatWhiteSpace();

return attribute.ToString().Trim();

}

public string ParseAttributeValue()

{

StringBuilder attribute = new StringBuilder();

EatWhiteSpace();

while ( !Eof() )

{

if (GetCurrentChar()==';')

{

m_idx++;

break;

}

attribute.Append(GetCurrentChar());

m_idx++;

}

EatWhiteSpace();

return attribute.ToString().Trim();

}

public char GetCurrentChar()

{

return GetCurrentChar(0);

}

public char GetCurrentChar(int peek)

{

if( (m_idx+peek)

return m_source[m_idx+peek];

else

return (char)0;

}

public char AdvanceCurrentChar()

{

return m_source[m_idx++];

}

public void Advance()

{

m_idx++;

}

public string Source

{

get

{

return m_source;

}

set

{

m_source = value;

}

}

public ArrayList Parse()

{

ArrayList elements = new ArrayList();

while (!Eof())

{

string elementName = ParseElementName();

if (elementName == null)

break;

CssElement element = new CssElement(elementName);

string name = ParseAttributeName();

string value = ParseAttributeValue();

while (name != null && value != null)

{

element.Add(name, value);

EatWhiteSpace();

if (GetCurrentChar()=='}')

{

m_idx++;

break;

}

name = ParseAttributeName();

value = ParseAttributeValue();

}

elements.Add(element);

}

return elements;

}

}

public class CssDocument

{

private string _Text;

public string Text

{

get

{

return _Text;

}

set

{

_Text = value;

}

}

private ArrayList _Elements;

public ArrayList Elements

{

get

{

return _Elements;

}

set

{

_Elements = value;

}

}

public CssElement this[string name]

{

get

{

for (int i = 0; i < Elements.Count; i++)

{

if (((CssElement)Elements[i]).Name.Equals(name))

return (CssElement)Elements[i];

}

return null;

}

}

private string _File;

public string File

{

get

{

return _File;

}

set

{

_File = value;

}

}

public CssDocument()

{

}

public void Load(string file)

{

using (StreamReader sr = new StreamReader(file))

{

Text = sr.ReadToEnd();

sr.Close();

}

CssParse parse = new CssParse();

parse.Source = Regex.Replace(Text, @"/\*.*?\*/", "", RegexOptions.Compiled);

Elements = parse.Parse();

}

public void Add(CssElement element)

{

Elements.Add(element);

}

public void Save()

{

Save(this.File);

}

public void Save(string file)

{

using (StreamWriter sw = new StreamWriter(file, false))

{

for (int i = 0; i < Elements.Count; i++)

{

CssElement element = (CssElement)Elements[i];

sw.WriteLine(element.Name + " {");

foreach (string name in element.Attributes.AllKeys)

{

sw.WriteLine("\t{0}:{1};", name, element.Attributes[name]);

}

sw.WriteLine("}");

}

sw.Flush();

sw.Close();

}

}

}

public class CssElement

{

private string _Name;

public string Name

{

get

{

return _Name;

}

set

{

_Name = value;

}

}

private NameValueCollection _Attributes;

public NameValueCollection Attributes

{

get

{

return _Attributes;

}

set

{

_Attributes = value;

}

}

public CssElement(string name)

{

this.Name = name;

Attributes = new NameValueCollection();

}

public void Add(string attribute, string value)

{

Attributes[attribute] = value;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值