Diskuze: Porovnání dvou polí
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Dá sa predpokladať že za položkou zo stylesForFind napr teda ".main" pôjde množinová zátvorka alebo medzera (čiže ".main " alebo ".main{")?
ne zde bude vždy jen buď .main nebo v případě id #main nikdy by se tam nemělo dostat nic jiného (bez mezer nebo jiných znaků)
Sorry zabudol som dopísať, som myslel že ak zo stylesForFind zoberem položku .main tak v allStyles bude treba nájsť také .main za ktorým ide množinová zátvorka či nie? Ak hej tak len z allStyles vyhodíš všetky medzery a budeš hľadať položky stylesForFind[i] + "{"
Nevím, ale myslím, že na takovýto druh příkladu by se ideálně hodila databáze nebo dobře nastylizovat .property file případně nějaké XMLko. Každopádně takto by ses za chvíli mohl dostat do situace, kdy místo obecného pole vytvoříš dvě naprosto specifické instance polí a už to nebude objektové. Tuším že děláš nějakou apku, kde budeš mít možnost vybrat styl z nějakého listu, ale kór když je to takhle specifické, tak bych to řešil spíš přes MySQL, to je v těchto případech mocnější. Java by to sice dokázala, ale musel bys fakt přemýšlet nad sebemenší odlišností, která by mohla nastat.
No to je otázka ...
Ve zkratce jde o app které řeknu chci tenhle prvek (tím se rozumí nějaký
blok html kodu)
Z kterého já vezmu všechny css třídy a id které pak vyhledam v stylech
dané stránky
Takže teď mám všechny třídy které chci
A mám celé css dane stránky
Výsledek by měl být jen css pro prvek který hledám to k tomu co by to
mělo být za app
Snad je to alespoň trochu srozumitelné
Nicméně rád mých si poradil s javou než to cpát do db tam bych mimochodem řešil asi podobný problém nicméně dik za názor popremyslim o tom ...
Ad omlouvám se za občasnou diakritiku jsem na mobilu
Myslím, že jádro problému je v tom, že řetězcová reprezentace
String[] allStyles= {".main { background: #fff; }", "#selection{ font-size:1em; }"," .main-footer{ width: 100%; } "};
není pro tvoji úlohu příliš vhodná.
Předpokládám, že už teď máš funkční kód, který z CSS souboru
vytvoří pole allStyles.
Zkusil bych jít ještě dál a napsat něco, co bude vracet nějakou
složitější strukturu.
Syntaxe CSS je popsána např. zde:
https://www.w3.org/…ss-syntax-3/
Pokud nechceš psát vlastní CSS parser, můžeš zkusit použít nějakou
knihovnu, např.
CSS Parser
http://cssparser.sourceforge.net/
Ahoj díky za reakci ... pole allstyles je pole vytvořené pomocí knihovny
cssparser kterou zminujes... možná jsem nečetl dost pozorně dokumentaci ale
nepodařilo se mi zjistit jak pomoci ní ne jen vytvořit pole z css stylu ale i
v něm nějakým způsobem vyhledávat ... očekával bych něco jako
.getClassName(string)
Nebo něco takového ale prostě se mi to nepodařilo v dokumentaci
najít...
Jestli s knihovnou máš nějaké zkušenosti budu rád když mě vyvedes z omylu ☺
Vyhledávání knihovna nepodporuje, ale k selektorům se dá dostat takto:
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import org.junit.Test;
import org.w3c.css.sac.InputSource;
import org.w3c.css.sac.Selector;
import org.w3c.css.sac.SelectorList;
import org.w3c.dom.css.CSSRule;
import org.w3c.dom.css.CSSRuleList;
import org.w3c.dom.css.CSSStyleSheet;
import com.steadystate.css.dom.CSSStyleRuleImpl;
import com.steadystate.css.parser.CSSOMParser;
import com.steadystate.css.parser.SACParserCSS3;
public class CssParserTest {
@Test
public void test() throws IOException {
InputStream in = getClass().getResourceAsStream("bootstrap.css");
InputStreamReader reader = new InputStreamReader(in, StandardCharsets.UTF_8);
InputSource source = new InputSource(reader);
CSSOMParser parser = new CSSOMParser(new SACParserCSS3());
CSSStyleSheet sheet = parser.parseStyleSheet(source, null, null);
CSSRuleList rules = sheet.getCssRules();
for (int ruleIndex = 0; ruleIndex < rules.getLength(); ruleIndex++) {
CSSRule rule = rules.item(ruleIndex);
if (rule.getType() == CSSRule.STYLE_RULE) {
CSSStyleRuleImpl styleRule = (CSSStyleRuleImpl) rule;
SelectorList selectors = styleRule.getSelectors();
for (int selectorIndex = 0; selectorIndex < selectors.getLength(); selectorIndex++) {
Selector selector = selectors.item(selectorIndex);
System.out.println(selector);
System.out.println(styleRule.getStyle().getCssText());
System.out.println();
}
}
}
}
}
Představoval jsem si to tak, že bych selektory vložil do nějaké datové struktury a vyhledával v ní.
Zobrazeno 11 zpráv z 11.