我有解析成org.w3c.dom.Document
的HTML代码。我需要检查所有style
属性的标签,解析它们,更改一些CSS属性,并将修改后的样式定义放回属性中。
是否有标准的方法来解析style
属性?我该如何使用org.w3c.dom.css
包中的类和接口?
我需要一个Java解决方案。
我有解析成org.w3c.dom.Document
的HTML代码。我需要检查所有style
属性的标签,解析它们,更改一些CSS属性,并将修改后的样式定义放回属性中。
是否有标准的方法来解析style
属性?我该如何使用org.w3c.dom.css
包中的类和接口?
我需要一个Java解决方案。
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
,不幸的是它并不是公开的。因此需要将其转换为字符串。另外,它不会处理 em
单位。虽然在各种样式方面有点聪明,但不是理想的解决方案,但避免了依赖关系。
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,其中可能包含您所需的内容,而且它具有企业友好的许可证。
我不确定我完全理解你的要求,但基本上,你需要:
看起来你会使用CSSStyleSheet接口从样式表中提取CSS规则。