解析HTML“;“风格”;使用Java的属性

解析HTML“;“风格”;使用Java的属性,java,html,parsing,coding-style,Java,Html,Parsing,Coding Style,我将HTML代码解析为org.w3c.dom.Document。我需要检查所有标签style属性,解析它们,更改一些CSS属性,并将修改后的样式定义放回属性 有没有标准的方法来解析style属性?如何使用org.w3c.dom.css包中的类和接口 我需要一个Java解决方案。首先,我要查看javax.xml包中的类。javax.xml.parsers包包含两种解析风格的解析器:SAXParser和DocumentBuilder。听起来您希望DocumentBuilder创建一个DOM。您可以手

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

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


我需要一个Java解决方案。

首先,我要查看
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);
您有责任将结果投射到节点列表并正确迭代,但这是获得所需结果的最直接方法。有关读取和更改值的更多信息,请查看Java的DOM API

我认为Java中不支持内置CSS解析器,但您可以查看以下项目:


这可能会帮助你实现目标。注意:Batik CSS解析器已整合到更大的Apache Batik项目中:该项目可能比您需要的更多,但它是一个公司友好的许可证。

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

  • 阅读样式表并提取CSS规则
  • 阅读HTML页面并查找属性
  • 用新的CSS属性替换旧的CSS属性
  • 编写HTML页面

  • 看起来您将使用CSSStyleSheet接口从SytSheet中提取CSS规则。

    如果您想要一种没有任何依赖项的方法,您可以使用
    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"
    

    这将返回一个
    样式表.CssValue
    ,不幸的是它不是公共的。因此,需要将其转换为字符串。此外,它不会处理
    em
    单元。不过,它在各种风格上有点聪明。不理想,但避免依赖项。

    +1表示不建议使用正则表达式。这是十分之九的新手首先要求的,我们都知道,这是不可能做到的。HTML已经被解析了,我也知道如何收集样式属性。现在我必须解析这些样式属性的内容。例如,将带有CSS定义的字符串转换为键值对或类似的集合。你看过我指给你看的CSS解析器项目吗?没有用于解析CSS的javax.*包。穷人的方法是正则表达式,它可以很好地用于CSS——但这不是你想要的。谢谢你的库链接。sac用于解析css样式表。cssparser根本没有文档,甚至没有简单的操作方法。蜡染对我的任务来说似乎太复杂了。不,我在字符串中有一个stye属性值,我必须根据CSS标准将其解析为键值对。感谢您的解决方案,但我希望看到更通用的,支持非标准CSS属性的东西(例如moz_xxx)。换句话说,泛型解析器只解析样式,而不实现样式。