【问题标题】:Parse HTML "style" attribute using Java使用 Java 解析 HTML“样式”属性
【发布时间】:2011-05-14 11:18:45
【问题描述】:

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

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

我需要一个 Java 解决方案。

【问题讨论】:

  • +1 表示不建议使用正则表达式。这是 10 个新手中有 9 个首先要求的,而且众所周知,这是不可能做到的。

标签: java html parsing coding-style


【解决方案1】:

如果您想要一种没有任何依赖关系的方法来执行此操作,您可以使用 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 单位。不过,它对各种风格有点聪明。不理想,但避免了依赖。

【讨论】:

  • 感谢您的解决方案,但我希望看到更通用的东西,支持非标准 CSS 属性(例如 moz_xxx)的东西。换句话说,通用解析器只解析样式,而不是实现它。
【解决方案2】:

首先,我会检查 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,它可能比您需要的更多,但它是一个企业友好的许可证。

【讨论】:

  • HTML 已经被解析,我也知道如何收集样式属性。现在我必须解析这些样式属性的内容。 IE。将带有 CSS 定义的字符串转换为键值对或类似的集合。
  • 你看过我指给你的 CSS 解析器项目了吗?没有用于解析 CSS 的 javax.* 包。穷人的方法是正则表达式,它适用于 CSS——但这不是你想要的。
  • 感谢图书馆链接。 css.sac 旨在解析 CSS 样式表。 cssparser 根本没有文档,甚至是简单的操作方法。蜡染对我的任务来说似乎太复杂了。
【解决方案3】:

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

  1. 阅读样式表并提取 CSS 规则。
  2. 阅读 HTML 页面并找到属性。
  3. 用新的 CSS 属性替换旧的 CSS 属性。
  4. 编写 HTML 页面。

看起来您将使用 CSSStyleSheet 接口从样式表中提取 CSS 规则。

【讨论】:

  • 不,我在字符串中有一个 stye 属性值,我必须根据 CSS 标准将其解析为键值对。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2016-04-02
  • 2012-08-24
  • 2012-12-02
  • 2016-02-16
  • 1970-01-01
相关资源
最近更新 更多