2012-04-02 1 views
3

Ich habe diese Anforderung, dass ich URL in CSS ersetzen müssen, haben so weit ich diesen Code, der die Regeln einer CSS-Datei anzuzeigen:Ersetzen URL in einem CSS mit CSS-Parser und Regex (Java)

@Override 
public void parse(String document) { 
    log.info("Parsing CSS: " + document); 
    this.document = document; 
    InputSource source = new InputSource(new StringReader(this.document)); 
    try { 
     CSSStyleSheet stylesheet = parser.parseStyleSheet(source, null, null); 
     CSSRuleList ruleList = stylesheet.getCssRules(); 
     log.info("Number of rules: " + ruleList.getLength()); 
     // lets examine the stylesheet contents 
     for (int i = 0; i < ruleList.getLength(); i++) 
     { 
      CSSRule rule = ruleList.item(i); 
      if (rule instanceof CSSStyleRule) { 
       CSSStyleRule styleRule=(CSSStyleRule)rule; 
       log.info("selector: " + styleRule.getSelectorText()); 
       CSSStyleDeclaration styleDeclaration = styleRule.getStyle(); 
       //assertEquals(1, styleDeclaration.getLength()); 
       for (int j = 0; j < styleDeclaration.getLength(); j++) { 
        String property = styleDeclaration.item(j); 
        log.info("property: " + property); 
        log.info("value: " + styleDeclaration.getPropertyCSSValue(property).getCssText()); 
        } 
       } 
      } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

ich bin aber nicht sicher, ob, wie man tatsächlich die URL ersetzen, da es nicht viel eine Dokumentation über CSS Parser

+0

Was genau wollen Sie ersetzen? Gibt es eine bestimmte URL-Zeichenfolge, die Sie an jede URL anhängen möchten? Oder möchten Sie einen Teil jeder URL im CSS ersetzen? –

+0

Ich muss einen Teil der URL ersetzen – xybrek

+0

nur neugierig: zu welcher API gehören CSSRuleList, CSSRule und CSSStyleSheet? – amphibient

Antwort

1

Hier die for-Schleife modifiziert:

//Only images can be there in CSS. 
Pattern URL_PATTERN = Pattern.compile("http://.*?jpg|jpeg|png|gif"); 
for (int j = 0; j < styleDeclaration.getLength(); j++) { 
    String property = styleDeclaration.item(j); 
    String value = styleDeclaration.getPropertyCSSValue(property).getCssText(); 

    Matcher m = URL_PATTERN.matcher(value); 
    //CSS property can have multiple URL. Hence do it in while loop. 
    while(m.find()) { 
     String originalUrl = m.group(0); 
     //Now you've the original URL here. Change it however ou want. 
    } 
}