使用Java解析HTML“style”属性

我有解析为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解析器的支持,但你可以看看这些项目:

  • http://www.w3.org/Style/CSS/SAC/Overview.en.html
  • http://cssparser.sourceforge.net/
  • 这可以帮助你实现你的目标。 注意:蜡染CSS解析器被合并到更大的Apache Batik项目中:http://xmlgraphics.apache.org/batik/index.html可能比你需要的更多,但它是一个企业友好的许可证。


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

  • 阅读样式表并提取CSS规则。
  • 阅读HTML页面并找到属性。
  • 将旧的CSS属性替换为新的CSS属性。
  • 编写HTML页面。
  • 看起来您将使用CSSStyleSheet接口从sytlesheet中提取CSS规则。

    链接地址: http://www.djcxy.com/p/3641.html

    上一篇: Parse HTML "style" attribute using Java

    下一篇: Question about the delay variable