我将HTML代码解析为org.w3c.dom.Document
。我需要检查所有标记style
属性,解析它们,更改一些CSS属性并将修改后的样式定义放回属性。
是否有任何标准方法可以解析style
属性?如何使用org.w3c.dom.css
包中的类和接口?
我需要一个Java解决方案。
答案 0 :(得分:2)
如果您想要一种没有任何依赖关系的方法,您可以使用javax.swing.text.html
包类来获取大部分内容:
import javax.swing.text.html.*;
StyleSheet styleSheet = new StyleSheet()
AttributeSet dec = ss.getDeclaration("margin:2px;padding:3px");
Object marginLeft = dec.getAttribute(CSS.Attribute.MARGIN_LEFT);
String marginLeftString = marginLeft.toString(); // "2px"
这会返回一个StyleSheet.CssValue
,但遗憾的是它不公开。因此需要将其转换为String。此外,它不会处理em
个单位。不过,它对各种风格都很聪明。不理想,但避免依赖。
答案 1 :(得分:1)
首先,我会检查javax.xml
包中的类。 javax.xml.parsers
包包含两种解析样式的解析器:SAXParser和DocumentBuilder。听起来你想让DocumentBuilder创建一个DOM。您可以手动遍历DOM(缓慢而痛苦),也可以使用XPath标准查找DOM中的元素。 Java支持就在javax.xml.xpath
。
XPathExpression xpath = XPath.compile("//@style");
Object results = xpath.evaluate(dom, XPathConstants.NODESET);
你有责任将结果转换为NodeList并正确迭代,但它是获得你想要的最直接的方法。查看Java的DOM API以获取有关读取和更改值的更多信息。
我不相信对Java内置的CSS解析器有任何支持,但您可以查看这些项目:
这可能会帮助您实现目标。注意:Batik CSS解析器被合并到更大的Apache Batik项目中:http://xmlgraphics.apache.org/batik/index.html可能比您需要的更多,但它是一个公司友好的许可证。
答案 2 :(得分:0)
我不确定我是否完全理解您的要求,但基本上,您必须:
看起来你会使用CSSStyleSheet接口从sytlesheet中提取CSS规则。