Utilizzando l'API Htmlparser (http://htmlparser.sourceforge.net/) ho fatto un parser che mi trova all interno di una pagina html tutti i tag di un certo tipo(in particolare il parser trova tag di tipo input,select,textarea e body).il parser funziona perfettamente a parte un problemino che non so come risolvere:
in pratica se uno dei tag cercati è all'interno di un tag div il parser non lo trova più.
quindi se
<input type="text" name="nome">
lo trova
se invece
<div class="pippo">
<input type="text" name="nome">
</div>
non lo trova +
questo è il codice qualcuno sa come aiutarmi?(semba lungo ma è semplice,fa sempre la stessa cosa)
codice:
public class Parse {
//creo degli oggetti vector per salvare i dati dei tag
public static Vector names = new Vector();
public static Vector type = new Vector();
public static Vector tagname = new Vector();
public static int conta=0;
public static int contatore=0;
public static void cercatag (String path){
try {
//creo varie inner class Visitor che in base al tag trovato salvano tagname,name e type nei Vector
class InputVisitor extends NodeVisitor{
public void visitTag(Tag tag){
if( tag.getTagName().equals("INPUT") && !tag.getAttribute("type").equalsIgnoreCase("BUTTON") && !tag.getAttribute("type").equalsIgnoreCase("SUBMIT") ){
tagname.add(tag.getTagName());
names.add( tag.getAttribute("name"));
type.add(tag.getAttribute("type"));
}
}
}
class BodyVisitor extends NodeVisitor{
public void visitTag(Tag tag){
if( tag.getTagName ().equals("BODY") ){
tagname.add(tag.getTagName());
names.add( tag.getAttribute("name"));
type.add(tag.getAttribute("type"));
}
}
}
class SelectVisitor extends NodeVisitor{
public void visitTag(Tag tag){
if( tag.getTagName ().equals("SELECT") ){
tagname.add(tag.getTagName());
names.add( tag.getAttribute("name"));
type.add(tag.getAttribute("type"));
}
}
}
class TextAreaVisitor extends NodeVisitor{
public void visitTag(Tag tag){
if( tag.getTagName ().equals("TEXTAREA") ){
tagname.add(tag.getTagName());
names.add( tag.getAttribute("name"));
type.add(tag.getAttribute("type"));
}
}
}
//svuoto i vari Vector in modo da non ritrovarmi tag analizzati prima
names.removeAllElements();
tagname.removeAllElements();
type.removeAllElements();
//creo degli oggetti(parser,nodelist) che mi permettono di parserare i tag del file
Parser p = new Parser(path);
NodeList list = new NodeList();
list = p.parse(null);
//con la visitallnodes(visitor) viene chiamata la visittag per tutti i tag trovati
//nel file e vengono salvati solo i tag relativi al visitor
list.visitAllNodesWith(new BodyVisitor());
list.visitAllNodesWith(new InputVisitor());
list.visitAllNodesWith(new SelectVisitor());
list.visitAllNodesWith(new TextAreaVisitor());
}
catch(Exception e ){
e.printStackTrace();
}
}