0

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

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

4

1 回答 1

3

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

正如 CSS3 语法规范所说:

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

请参阅此处的完整规范。

于 2012-05-10T10:49:45.027 回答