Inline external CSS with HTML
我正在寻找一个Java库,它可以基于它的ID /类属性,使用一个EDCOX1×1文档来内嵌一个外部EDCOX1×0文件。
我找到了JStyleParser,但我不确定这是否是适合我的库。我似乎不明白它是否能在HTML的元素上嵌入
有没有人能回答这个问题,或者有没有其他的图书馆?
谢谢
你可以试试cssbox。只需查看包中包含的Computestyles演示(有关运行演示的信息,请参阅分发包中的doc/examples/readme文件)。它计算所有样式并创建一个新的HTML文档(由DOM表示),其中包含相应的内联样式定义。
源代码在src/org/fit/cssbox/demo/computestyles.java中,非常短。实际上,它使用JStyleParser来完成主要的工作,CSSBox只是为此提供了一个更好的接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | //Open the network connection DocumentSource docSource = new DefaultDocumentSource(args[0]); //Parse the input document DOMSource parser = new DefaultDOMSource(docSource); Document doc = parser.parse(); //Create the CSS analyzer DOMAnalyzer da = new DOMAnalyzer(doc, docSource.getURL()); da.attributesToStyles(); //convert the HTML presentation attributes to inline styles da.addStyleSheet(null, CSSNorm.stdStyleSheet(), DOMAnalyzer.Origin.AGENT); //use the standard style sheet da.addStyleSheet(null, CSSNorm.userStyleSheet(), DOMAnalyzer.Origin.AGENT); //use the additional style sheet da.getStyleSheets(); //load the author style sheets //Compute the styles System.err.println("Computing style..."); da.stylesToDomInherited(); //Save the output PrintStream os = new PrintStream(new FileOutputStream(args[1])); Output out = new NormalOutput(doc); out.dumpTo(os); os.close(); docSource.close(); |
我对jsoup(v1.5.2)非常满意。我有这样的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public static String inlineCss(String html) { final String style ="style"; Document doc = Jsoup.parse(html); Elements els = doc.select(style);// to get all the style elements for (Element e : els) { String styleRules = e.getAllElements().get(0).data().replaceAll(" ","").trim(); String delims ="{}"; StringTokenizer st = new StringTokenizer(styleRules, delims); while (st.countTokens() > 1) { String selector = st.nextToken(), properties = st.nextToken(); if (!selector.contains(":")) { // skip a:hover rules, etc. Elements selectedElements = doc.select(selector); for (Element selElem : selectedElements) { String oldProperties = selElem.attr(style); selElem.attr(style, oldProperties.length() > 0 ? concatenateProperties( oldProperties, properties) : properties); } } } e.remove(); } return doc.toString(); } private static String concatenateProperties(String oldProp, @NotNull String newProp) { oldProp = oldProp.trim(); if (!oldProp.endsWith(";")) oldProp +=";"; return oldProp + newProp.replaceAll("\\s{2,}",""); } |