Va spun din start - I like
DOM. Nu stiu de ce. Probabil pentru ca sunt un tip mai ordonat din fire, si imi place ca lucrurile sa aiba structura. Sau poate pentru ca pur si simplu mi se pare foarte usor de lucrat cu el - in comparatie cu metode on-the-fly precum
SAX de exemplu.
Sa detaliem pe un exemplu, de care m-am lovit eu in rezolvarea
temei 2 Dupa cum puteti citi si in
detalierea abordarii mele , trebuia sa parcurg pagini de filme de pe IMDB si sa extrag referinte la alte filme si regizori. In particular, trebuia sa extrag din lista de recomandari ale unui film alte titluri de filme de potential interes.
Iata spre exemplu o "mica" bucata din pagina IMDB a (excelentului ) film
Mean Streets:
aici e exemplulCu SAX, si de fapt cu orice fel de parser secvential - de ex cel folosit de mine pentru a implementa tema, diferit de SAX - pentru asta vezi tot
modul meu de implementare - pentru a face rost de lista de filme recomandate, trebuie mai intai cautat in HTML acel tag
H3 care are ca text
Recommendations. Dupa ce acest tag este gasit, trebuie cautata(prima) eticheta de inceput de tabel; dupa ce si aceasta este gasita, trebuie cautata
a doua eticheta de start
TR ; abia in acest moment, pentru fiecare
TD intalnit, putem face rost de informatiile ce ne intereseaza despre film. Si inca acest procedeu nu este deloc complicat; pentru niste informatii aflate in niste taguri cu un nivel de imbricare mai mare, deja incepi sa te pierzi in detalii.
Sa comparam spre exemplu cu modul cum ai putea sa rezolvi problema in DOM:
xmlDoc = loadXMLDoc("MeanStreets.html");
var x = xmlDoc.getElementsbyTagName("H3");
for( var i=0 ; i < x.length ; i++ )
{
if( x[i].nodeValue.equals("Recommendations") ) {
var children = x[i].nextSibling().nextSibling().getChildren()[2].getChildren();
for( var j = 0 ; j < children.length ; j++ ) {
var movie = children[j].getFirstChild();
movieName = movie.nodeValue;
movieLink = movie.getAttribute('href');
}
}
}
Parca arata ceva mai curat, nu?