Cómo analizar archivos css con java
Recientemente, para satisfacer las necesidades del desarrollo funcional, configurar dinámicamente la información de los atributos del componente requiere analizar la hoja de estilo CSS de la interfaz de usuario. En línea, descubrí que cssparser es actualmente más adecuado, pero no cumple con los requisitos para un determinado atributo del estilo. Es por eso que escribí una clase de herramienta que puede analizar archivos de estilo para obtener información de clase de estilo a través de expresiones regulares y cssparser, y también puede obtener cierta información de atributos bajo una determinada clase de estilo. El código es el siguiente: es necesario introducir dos paquetes jar (CSSparser-).
Paquete com.demo
Importar Java .io .Importar Java . io.inputstreamreader;
Importar Java.util.regex.matcher;
Importar Java.util.regex.pattern;
Importar org.W3C.CSS. sac . fuente de entrada
Importar org .W3C .CSS . org. W3C. DOM. CSS.
Importar estado estable. ;
Clase pública CSSUtil {
hoja de estilo privada = null
CSSStyleSheet pública getSheet() {
Hoja de retorno; p> p>
}
Hoja de conjunto de anulación pública (hoja de estilo CSS){
this.sheet = hoja
}
/**
*Especificar flujo de archivos
* @param stream
*/
CSSUtil público (flujo de InputStream){ p>
fuente de entrada fuente = nueva fuente de entrada(new InputStreamReader(stream));
Analizador CSSOMParser = new CSSOMParser(new sacparsercss 3());
Probar {
hoja = analizador . analizar hoja de estilo (fuente, nulo, nulo
} captura (IOException e) {
//TODO captura generada automáticamente bloquear
e .printstacktrace();
}
}
/**
*Obtener estilo información
* @param className nombre de estilo
* @return devuelve la información de este estilo.
*/
Cadena pública getClass(nombre de clase de cadena){
if(hoja == null){
Devolver nulo
}
Cadena res =
CSSRuleList reglas = hoja . getcss reglas();
for(int I = 0; i& ltrules . getlength(); i++) {
Regla CSS = reglas .
Patrón patrón = Pattern.compile("\\ . "+nombredeclase +". *([^\\{]\\{.*[^\\}]\\})");
matcher matcher = patrón . matcher(regla . getcss text()) ; p>
while(matcher.find()){
RES = RES+matcher grupo(1)+" \ n ";
} p><. p>}
Devolver res
}
/**
* Obtener un determinado estilo bajo una determinada clase de estilo Información de atributo, no se devuelve nada.
* @param className nombre de clase de estilo
* @param nombre de atributo
* @return
*/
Atributo getcss de cadena pública (nombre de clase de cadena, nombre de atributo de cadena){
contenido de clase de cadena = this. getclass(nombre de clase);
Patrón de patrón = patrón.compile(" [ ^a-za-z\\-]"+attrname+" :\\s*([^;\\}]{1,100})\ \ s *[;\\}]{1}");
matcher matcher = patrón . matcher(contenido de clase);
String res =
while(matcher.find()){
RES = grupo coincidente(1);
}
Devolver res
}
}