【问题标题】:Is there a CSS parser for C#? [closed]有 C# 的 CSS 解析器吗? [关闭]
【发布时间】:2009-02-04 18:45:23
【问题描述】:

我的程序需要将 css 文件解析为内存对象格式。关于如何做到这一点的任何建议?

【问题讨论】:

  • 我不明白为什么这个问题被关闭了。它得到了很多人的投票,他们显然对同样的事情感到好奇。仅仅因为不同的人可能对最佳解决方案有不同的意见,那么在此为有相同问题的其他人列出这些意见真是太棒了。
  • @JonathanWood - 我完全同意,但政策是工具推荐是题外话,它要求工具推荐。所以关闭它是适当的,即使令人沮丧。
  • 我已经重写了这个问题,所以它可以重新打开
  • @Softlion,通过这样做,您似乎已经使所有六个现有答案无效,其中没有一个是关于 Linq 的。 IMO 最好回滚,发布一个新问题,然后在对此问题的评论中链接到该新问题。
  • 你是对的,我删除了“Linq”,因为它在最初的问题中不存在。

标签: c# css parsing


【解决方案1】:

ExCSS(支持 CSS2.1 和 CSS3)在 GitHub 上:https://github.com/TylerBrinks/ExCSS

哪个是较新版本的代码项目文章:http://www.codeproject.com/KB/recipes/CSSParser.aspx

【讨论】:

  • 希望它将媒体查询解析为对象模型。这样做并不是特别难,但它给你的只是一个字符串
  • 它可以工作,但是发现了一些它无法解析的东西:calc(50vw - 23em) 变为 calc(50vw = 23em) / 3rem 变为 3 / z-index: 2147483647 变为 z-index: 2.147484E+09 / *display: none变成display: none
  • 它也不处理@-ms-viewport在输出中返回{System.Collections.Generic.List`1[ExCSS.RuleSet]}
【解决方案2】:

稍微慢一点的搜索会出现博客帖子“CSS parser class in .NET”,其中嵌入了this gist on GitHub(以防博客死了)。

【讨论】:

  • ...啊-它死了
【解决方案3】:

GoldParser有一个CSS语法文件:

http://goldparser.org/grammars/files/css.zip

GoldParser 很容易包含在 C# 项目中,并生成真正的 LALR 解析器 - 而不是一些 regex hack。

【讨论】:

  • LALR 解析器 - 不是他们网站上的一些正则表达式信息“GOLD 语法基于 Backus-Naur 形式和正则表达式”
  • 好点,正则表达式很酷。手动滚动解析器不是
  • 这是一个非常简化的 CSS 语法版本。相反,我移植了 CSS 参考语法(来自 CSS 2.1 规范)以使用 GOLD 解析器......并且我编写了一个 C# 程序集来实现它的其余部分(使用解析器输出来计算元素的样式)一个 DOM,使用规则特异性、继承、默认值等)。
  • Goldparser 不错,但速度极慢。即使在速度优化的 C++ 代码中,解析 15000 行代码也需要 10 秒。如果将此与 PHP 解析器的速度进行比较,这是非常慢的。
【解决方案4】:

你试过one featured in JsonFx吗?它是用 C# 编写的,解析 CSS3 语法并在 MIT 风格的许可下分发。

【讨论】:

  • 看起来是最坏的一组(使用goto 语句递归 - 哎哟)
  • @B:goto避免递归的好方法,因为它避免了重新输入函数。当迭代次数可能很多时,它是避免堆栈溢出风险的绝佳选择。
  • ...因为当您有大量迭代时,您将面临堆栈溢出的风险。 :D
  • 尾递归救援....
【解决方案5】:

我写了一个,使用 CSS 2.1 规范中指定的语法。我现在也发布了:详情见http://www.modeltext.com/css/

【讨论】:

  • 酷。我们其他人可以尝试/购买吗?
  • 发送电子邮件:我的 gmail id 是“cwellsx”。
【解决方案6】:

Here你可以找到另外一个特别适用于 C# 的示例源代码。

【讨论】:

  • 这使用了正则表达式,它不会为复杂的 css 删减它
猜你喜欢
  • 2013-02-17
  • 2010-10-09
  • 2010-09-10
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多