css解析器不起作用?

时间:2012-05-10 10:42:00

标签: java css

我编写了一个使用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的属性中出现双重':'的错误

那么有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

您发布的代码比实际问题高出几个级别。问题在于词汇扫描仪。它对标识符(IDENT)的定义似乎是错误的,因为它也可以包含连字符并以连字符开头。

正如CSS3语法规范所说:

  

在CSS3中,标识符(包括选择器中的元素名称,类和ID(参见[SELECT [或仍然如此]))只能包含字符[A-Za-z0-9]和ISO 10646字符161更高,加上连字符( - )和下划线(_);它们不能以数字或连字符后跟数字开头。

请参阅完整规范here