我编写了一个使用jar cssparser-0.9.5.jar扫描css文件的程序,我对它执行了一些操作
public static Map<String, CSSStyleRule> parseCSS(String FileName) throws IOException {
Map<String, CSSStyleRule> rules = new LinkedHashMap<String, CSSStyleRule>();
InputSource inputSource = new InputSource(
new FileReader(FileName));
CSSStyleSheet styleSheet = new CSSOMParser().parseStyleSheet(
inputSource, null, null);
CSSRuleList ruleList = styleSheet.getCssRules();
for (int i = 0; i < ruleList.getLength(); i++) {
CSSRule rule = ruleList.item(i);
if (rule.getType() == CSSRule.STYLE_RULE) {
CSSStyleRule styleRule = (CSSStyleRule) rule;
rules.put(styleRule.getSelectorText(), styleRule);
}
}
return rules;
}
此代码适用于所有类,除了包含以“ - ”开头的类的类,如
.overlay
{
filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000');
}
解析之后,在类.overlay的属性中出现双重':'的错误
那么有什么想法可以解决这个问题吗?
答案 0 :(得分:3)
您发布的代码比实际问题高出几个级别。问题在于词汇扫描仪。它对标识符(IDENT)的定义似乎是错误的,因为它也可以包含连字符并以连字符开头。
正如CSS3语法规范所说:
在CSS3中,标识符(包括选择器中的元素名称,类和ID(参见[SELECT [或仍然如此]))只能包含字符[A-Za-z0-9]和ISO 10646字符161更高,加上连字符( - )和下划线(_);它们不能以数字或连字符后跟数字开头。
请参阅完整规范here。