jStyleParser 1.7 小问题

处理一个正常web页面的时候, 程序不断的抛出如下异常.

最后问题定位在extractElementText这个函数, 这个函数用于提取嵌入的CSS. 但是遇到没有任何内容的style标签的时候, 返回的是null. 例如.

<style id="csstyle"></style>

即使只有一个空白符, 也会返回正常的值. 这里文本节点没有任何内容, 返回null.

        /**
         * Extracts element's text, if any
         
         @param e
         *            Element
         @return Element's text or {@code null}
         */
        private static String extractElementText(Element e) {
            Node text e.getFirstChild();
            if (text != null && text.getNodeType() == Node.TEXT_NODE)
                return ((Texttext).getData();
            return null;
        }

这个返回值会以如下方式使用.

    public static CSSInputStream stringStream(String sourcethrows IOException {
        CSSInputStream stream new CSSInputStream();
        
        stream.rawData source;
        stream.encoding Charset.defaultCharset().name();
        
        BufferedReader br new BufferedReader(
                new InputStreamReader(new ByteArrayInputStream(source.getBytes()), stream.encoding));
        stream.input new ANTLRReaderStream(br);
        
        return stream;
    }

参数source不应该为null. 非常明显, 正确的做法是返回一个空字符串而不是null.

其实新版本已经修正了这个问题. checkout一下源码.

F:\workspace>svn checkout svn://svn.code.sf.net/p/cssbox/jstyleparser/code/trunk cssbox-jstyleparser-code

打开CSSFactory.java. 已经修正了.

        /**
         * Extracts element's text, if any
         
         @param e
         *            Element
         @return Element's text
         */
        private static String extractElementText(Element e) {
            Node text e.getFirstChild();
            if (text != null && text.getNodeType() == Node.TEXT_NODE)
                return ((Texttext).getData();
            return "";
        }