使用Java解析HTML“style”属性

时间:2010-11-23 13:15:58

标签: java html parsing coding-style

我将HTML代码解析为org.w3c.dom.Document。我需要检查所有标记style属性,解析它们,更改一些CSS属性并将修改后的样式定义放回属性。

是否有任何标准方法可以解析style属性?如何使用org.w3c.dom.css包中的类和接口?

我需要一个Java解决方案。

3 个答案:

答案 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)

我不确定我是否完全理解您的要求,但基本上,您必须:

  1. 阅读样式表并提取CSS规则。
  2. 阅读HTML页面并找到属性。
  3. 替换旧CSS属性的新CSS属性。
  4. 撰写HTML页面。
  5. 看起来你会使用CSSStyleSheet接口从sytlesheet中提取CSS规则。