`

使用java解析CSS文件

阅读更多

 

    最近为了满足功能研发,动态设置部件属性信息,需要解析前端界面的CSS样式表,但是在网上查了查,目前比较合适的是cssparser,但是不满足获取样式的某个属性,这是我写了个工具类,通过正则表达式和cssparser解析样式文件,获取样式类信息,也可获取某个样式类下的某个属性信息,代码如下,需要引入两个jar包(cssparser-0.9.18.jar和sac.jar,在附件中可下载)

package com.demo;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.w3c.css.sac.InputSource;
import org.w3c.dom.css.CSSRule;
import org.w3c.dom.css.CSSRuleList;
import org.w3c.dom.css.CSSStyleSheet;

import com.steadystate.css.parser.CSSOMParser;
import com.steadystate.css.parser.SACParserCSS3;

public class CSSUtil {

	private CSSStyleSheet sheet = null;
	
	public CSSStyleSheet getSheet() {
		return sheet;
	}

	public void setSheet(CSSStyleSheet sheet) {
		this.sheet = sheet;
	}

	/**
	 * 指定文件流
	 * @param stream
	 */
	public CSSUtil(InputStream stream){
		InputSource source = new InputSource(new InputStreamReader(stream));
		
		CSSOMParser parser = new CSSOMParser(new SACParserCSS3());
		try {
			 sheet = parser.parseStyleSheet(source, null, null);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 获取样式信息
	 * @param className 样式名
	 * @return 返回该样式的信息
	 */
	public String getClass(String className){
		if(sheet == null){
			return null;
		}
		String res = "";
		CSSRuleList rules = sheet.getCssRules();
		for (int i = 0; i < rules.getLength(); i++) {
		    CSSRule rule = rules.item(i);
		    Pattern pattern = Pattern.compile("\\."+className + ".*([^\\{]\\{.*[^\\}]\\})");
			Matcher matcher = pattern.matcher(rule.getCssText());
			while(matcher.find()){
				res = res + matcher.group(1) + "\n";
			}
		}
		return res;
	}
	/**
	 * 获取某个样式类下的某个属性信息,没有返回空
	 * @param className 样式类名称
	 * @param attrName 属性名称
	 * @return
	 */
	public String getCssAttribute(String className, String attrName){
		String classContent = this.getClass(className);
		Pattern pattern = Pattern.compile("[^a-zA-Z\\-]" + attrName + ":\\s*([^;\\}]{1,100})\\s*[;\\}]{1}");
		Matcher matcher = pattern.matcher(classContent);
		String res = "";
		while(matcher.find()){
			res = matcher.group(1);
		}
		return res;
	}
}

 

  • sac.jar (14.2 KB)
  • 下载次数: 28
分享到:
评论
1 楼 武林第一帅哥 2017-12-21  
很靠谱嘛。。。

相关推荐

    java对mht文件解析

    通过上述步骤,我们可以有效地使用Java解析MHT文件并从中提取所需的内容。这种方法不仅适用于简单的MHT文件解析,还可以进一步扩展来支持更复杂的场景,比如处理嵌入式资源或进行更深入的文本分析。 ### 结语 本文...

    java控制css样式的读写

    - 使用DOM解析器:如果需要解析CSS文件的内容,可以使用`javax.xml.parsers.DocumentBuilderFactory`来创建DOM解析器,将CSS内容转化为XML结构,然后遍历节点获取样式规则。 - 使用第三方库:如Apache Commons IO...

    EPUB 解析 (java)

    Java解析模块会将这些内容解压、提取,并可能进行进一步的处理,如图像的重命名和移动,以适应不同的设备和阅读环境。 在FBreader的优化版本中,可能包括了性能提升、内存管理优化、错误修复或新特性添加。例如,...

    javaCssParser:用于CSS文件解析的简单Java库

    9. **易用性和文档**:为了便于开发者使用,JavaCssParser应该提供清晰的API文档,详细解释每个方法的功能和用法,同时提供示例代码以展示如何操作CSS文件。 10. **社区支持和持续维护**:一个活跃的开发者社区和...

    java 解析 html

    在这个场景下,我们讨论的是如何利用Java解析HTML以获取特定标签路径下的内容,例如`html/body/div/div/`。 首先,我们需要一个强大的库来解析HTML,如Jsoup。Jsoup是一个用于处理实际世界HTML的Java库,它提供了一...

    java解析pdf实例

    在压缩包文件"Demo"中,可能包含了一个简单的Java项目,演示了如何结合使用jsoup抓取网页上的PDF链接,并用PDFBox读取下载的PDF内容。项目可能分为两个部分:一个用于下载PDF,另一个用于解析PDF。 总结,这个实例...

    JAVA用poi解析doc、docx、slx、xlsx,保证完整

    接下来,我们来看如何使用POI解析不同类型的文件: 1. **解析doc和docx文件**: - 对于.doc文件,我们需要使用HWPFDocument类来打开文档。然后,我们可以使用Document对象的方法如getText()来获取整个文档的文本。...

    java解析html

    例如,你可以使用 `Jsoup.connect(url).get()` 获取网页内容,然后使用 `select("CSS 选择器")` 来查找特定元素。 ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; Document doc = Jsoup....

    jStyleParser:jStyleParser是用Java编写CSS解析器。 它具有自己的应用程序界面,该界面旨在允许以Java进行高效CSS处理并将值映射到Java数据类型。 它将CSS 2.1样式表解析为可以有效分配给DOM元素的结构。 它旨在用作CSSBox库的主要CSS解析器。 处理错误时,它是符合CSS规范的用户代理

    jStyleParser jStyleParser是一个Java库,用于解析CSS样式表并根据CSS 3规范将样式分配给HTML或XML文档元素。 它允许解析单个CSS文件以及计算DOM元素的有效样式。 有关更多信息,请参见项目页面: : 安装对于Maven,...

    下载css文件中包含的图片

    在Java中,我们可以使用诸如Jsoup这样的库来解析CSS文件。Jsoup能很好地处理HTML和CSS,提供了一套方便的API来提取和操作元素。 接下来,我们将使用以下步骤来实现下载CSS文件中图片的功能: 1. **读取CSS文件**:...

    jsoup Java HTML解析器

    它提供了非常方便的方法来提取和操作数据,使用DOM,CSS以及类似于jQuery的API。jsoup能够理解HTML的不完美之处,同时提供了强大的功能来清洁、解析、修改以及提取HTML内容。 ### jsoup的核心功能 1. **HTML解析**...

    java实现js、css、图片合并到html文件

    技术点:1、使用htmlparser解析html文件,得到html代码里的js、css、img链接 2、将相对路径的链接转变成绝对路径,并读取资源 3、将css和js合并到html 4、将图片转换成base64编码,写入标签的src

    java实现HTML解析图片批量下载

    总之,通过使用Jsoup,我们可以轻松地解析HTML文档,找到所有的图片链接,并使用Java的网络和文件I/O功能将它们下载到本地。这个项目不仅可以作为学习Java网络编程和HTML解析的实践,还可以应用于各种实际场景,例如...

    JAVA用poi解析doc、docx、slx、xlsx

    解析.doc文件时,你需要使用HWPFDocument类来创建一个文档对象,然后通过这个对象可以访问文档的段落、字符等元素。例如: ```java FileInputStream fis = new FileInputStream("document.doc"); HWPFDocument ...

    java实现文件批量上传

    3. `Java服务端代码`:处理文件上传的Servlet或Controller,负责接收请求、解析文件并保存到服务器。 4. `CSS样式文件`:定义了上传界面的样式,使界面更加美观。 5. `HTML模板`:可能包含了SWF和EXT的初始化代码,...

    java URL转PDF文件

    在Java编程环境中,将一个URL链接的内容转换为PDF文件是一个常见的需求,这通常涉及到网络请求、HTML解析以及PDF生成等多个步骤。以下是一个详细的步骤指南,涵盖了这个过程中的关键知识点: 首先,我们需要处理URL...

    基于Java与CSS的网易云风格MusicPlayer5设计源码

    项目包含136个文件,涵盖56个PNG图片、35个Java源文件、19个JAR包文件、8个FXML界面文件、7个CSS样式表文件以及少量其他辅助文件。该播放器界面华丽,特效酷炫,专为网易云音乐用户定制,支持多种音频格式播放及Tag...

    cssBox 包 java

    这个工具可以帮助开发者理解和解析CSS盒模型,进而实现网页元素的截图并保存为图片的功能。在Java应用开发中,有时我们需要在后台程序中对网页进行操作,比如自动化测试、数据分析或内容抓取,CSSBox就能派上用场。 ...

    使用Jsoup,抓取整个网站(包括图片、js、css)

    `&lt;link&gt;`标签的`href`属性指向CSS文件,`&lt;script&gt;`标签的`src`属性指向JS文件。我们同样下载这些文件并保存到本地,同时更新HTML文档中的链接。 在处理过程中,我们需要根据网站目录结构在本地创建相应的目录,确保...

Global site tag (gtag.js) - Google Analytics