Есть ли парсер CSS для С#?

Моя программа должна анализировать файлы css в формате объекта в памяти. Любые советы о том, как это должно быть сделано?


person Ken    schedule 04.02.2009    source источник
comment
Я не понимаю, почему этот вопрос был закрыт. Он получил много голосов от людей, которые, по-видимому, задаются тем же вопросом. Просто потому, что у разных людей могут быть разные мнения о лучшем решении, какое прекрасное место для перечисления этих мнений для других с одним и тем же вопросом.   -  person Jonathan Wood    schedule 06.09.2013
comment
@JonathanWood - я полностью согласен, но политика такова, что рекомендации по инструментам не по теме, и он запрашивает рекомендацию по инструменту. Поэтому закрытие уместно, даже если это расстраивает.   -  person Bobson    schedule 18.10.2013
comment
Я переписал вопрос, чтобы его можно было открыть снова   -  person Softlion    schedule 20.10.2015
comment
@Softlion, тем самым вы, похоже, аннулировали все шесть существующих ответов, ни один из которых не говорит о Linq. ИМО, было бы предпочтительнее откатиться, опубликовать новый вопрос, а затем сослаться на этот новый вопрос в комментарии к этому.   -  person Peter Taylor    schedule 21.10.2015
comment
Вы были правы, я удалил Linq, так как его не было в исходном вопросе.   -  person Softlion    schedule 21.10.2015
comment
Когда я искал синтаксический анализатор css на C#, я наткнулся на этот вопрос, поэтому он, безусловно, ценен.   -  person Anders Lindén    schedule 02.12.2020


Ответы (6)


ExCSS (поддерживает CSS2.1 и CSS3) на GitHub: https://github.com/TylerBrinks/ExCSS .

Это более новая версия статьи проекта кода: http://www.codeproject.com/KB/recipes/CSSParser.aspx

person Jon Tackabury    schedule 04.02.2009
comment
хотелось бы, чтобы он разобрал медиа-запрос в объектную модель. это не особенно сложно сделать, но все, что это дает вам, это строка - person Simon_Weaver; 29.12.2014
comment
он работает, но обнаружил ряд вещей, которые не может разобрать: calc(50vw - 23em) становится calc(50vw = 23em) / 3rem становится 3 / z-index: 2147483647 становится z-index: 2.147484E+09 / *display: none становится display: none - person Simon_Weaver; 30.12.2014
comment
Он также не обрабатывает @-ms-viewport, возвращающий {System.Collections.Generic.List`1[ExCSS.RuleSet]} на выходе. - person Herman Kan; 28.04.2015

И немного более медленный поиск приводит к сообщению в блоге "класс парсера CSS в .NET", который встраивает эту суть на GitHub (на случай, если блог когда-нибудь умрет).

person mercator    schedule 04.02.2009
comment
...ах-и он умер - person Alex from Jitbit; 30.01.2018

Существует файл грамматики CSS для GoldParser:

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

GoldParser легко включить в проект C#, и он генерирует настоящий синтаксический анализатор LALR, а не какой-то взлом регулярных выражений.

person Community    schedule 08.07.2009
comment
Парсер LALR - не какое-то регулярное выражение. Информация на их сайте GOLD-грамматики основаны на форме Бэкуса-Наура и регулярных выражениях. - person Justin; 09.07.2009
comment
Хорошо, регулярные выражения — это круто. Прокат парсера вручную не - person ; 10.07.2009
comment
Это очень упрощенная версия грамматики CSS. Вместо этого я перенес эталонный грамматик CSS (из спецификации CSS 2.1) для работы с синтаксическим анализатором GOLD... и написал сборку C# для реализации остальной части (используйте выходные данные синтаксического анализатора для вычисления стиля элемента в DOM с использованием специфичности правил, наследования, значений по умолчанию и т. д.). - person ChrisW; 18.09.2009
comment
Goldparser хорош, но очень медленный. Даже в оптимизированном по скорости коде C++ для разбора 15000 строк кода требуется 10 секунд. Если вы сравните это со скоростью парсера PHP, это будет очень медленно. - person Elmue; 26.09.2013



Здесь вы можете найти еще один, специально для C#, с исходным кодом.

person dajood    schedule 04.02.2009
comment
здесь используются регулярные выражения, которые просто не подходят для сложных css. - person Simon_Weaver; 29.12.2014