I'm looking for a CSS Parser in java. In particular my requirement is, for a given node/element in an HTML document, to be able to ask/get the css styles for that element from the Parser.
I know there is the W3C SAC interface and one or 2 implementations based on this - but turorials/examples appear non-existant.
Any help/points in right direction much appreciated.
Thanks
It can reside in the same folder where your html/jsp page resides, or it can reside in any sub folder within that too. But accordingly to you have to specify the path. Deploy them in subdirectories under "[your-project]/WebContent". I usually name the subdirectories "js" and "css".
Java objects are not HTML documents. The CSS2 syntax remains, so that a CSS editor can still be used to create the style sheet. However, the differences lead to adaptations of the CSS mechanism so that its power can be fully exploited and directed to some specific behavior.
Overview. The CSS Parser is implemented as a package of Java classes, that inputs Cascading Style Sheets source text and outputs a Document Object Model Level 2 Style tree. Alternatively, applications can use SAC: The Simple API for CSS.
Essentially, we parse through any CSS selectors we have and assign them their place in the tree. If there's a single selector, it will be attached to the root node of the tree. Nested selectors will be attached to the node which they are nested underneath.
I've used CSSParser and I like it- it gives good feedback on errors as well.
Here's some sample code I've found and modified:
package com.dlogic; import com.steadystate.css.parser.CSSOMParser; import org.w3c.css.sac.InputSource; import org.w3c.dom.css.CSSStyleSheet; import org.w3c.dom.css.CSSRuleList; import org.w3c.dom.css.CSSRule; import org.w3c.dom.css.CSSStyleRule; import org.w3c.dom.css.CSSStyleDeclaration; import java.io.*; public class CSSParserTest { protected static CSSParserTest oParser; public static void main(String[] args) { oParser = new CSSParserTest(); if (oParser.Parse("design.css")) { System.out.println("Parsing completed OK"); } else { System.out.println("Unable to parse CSS"); } } public boolean Parse(String cssfile) { FileOutputStream out = null; PrintStream ps = null; boolean rtn = false; try { // cssfile accessed as a resource, so must be in the pkg (in src dir). InputStream stream = oParser.getClass().getResourceAsStream(cssfile); // overwrites and existing file contents out = new FileOutputStream("log.txt"); if (out != null) { //log file ps = new PrintStream( out ); System.setErr(ps); //redirects stderr to the log file as well } else { return rtn; } InputSource source = new InputSource(new InputStreamReader(stream)); CSSOMParser parser = new CSSOMParser(); // parse and create a stylesheet composition CSSStyleSheet stylesheet = parser.parseStyleSheet(source, null, null); //ANY ERRORS IN THE DOM WILL BE SENT TO STDERR HERE!! // now iterate through the dom and inspect. CSSRuleList ruleList = stylesheet.getCssRules(); ps.println("Number of rules: " + ruleList.getLength()); for (int i = 0; i < ruleList.getLength(); i++) { CSSRule rule = ruleList.item(i); if (rule instanceof CSSStyleRule) { CSSStyleRule styleRule=(CSSStyleRule)rule; ps.println("selector:" + i + ": " + styleRule.getSelectorText()); CSSStyleDeclaration styleDeclaration = styleRule.getStyle(); for (int j = 0; j < styleDeclaration.getLength(); j++) { String property = styleDeclaration.item(j); ps.println("property: " + property); ps.println("value: " + styleDeclaration.getPropertyCSSValue(property).getCssText()); ps.println("priority: " + styleDeclaration.getPropertyPriority(property)); } }// end of StyleRule instance test } // end of ruleList loop if (out != null) out.close(); if (stream != null) stream.close(); rtn = true; } catch (IOException ioe) { System.err.println ("IO Error: " + ioe); } catch (Exception e) { System.err.println ("Error: " + e); } finally { if (ps != null) ps.close(); } return rtn; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With