使用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解析器的支持,但你可以看看这些项目:
这可以帮助你实现你的目标。 注意:蜡染CSS解析器被合并到更大的Apache Batik项目中:http://xmlgraphics.apache.org/batik/index.html可能比你需要的更多,但它是一个企业友好的许可证。
我不确定我完全理解您的要求,但基本上,您必须:
看起来您将使用CSSStyleSheet接口从sytlesheet中提取CSS规则。
链接地址: http://www.djcxy.com/p/3641.html