Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    99

    help me parser xhtml

    Sto cercando di parserae un file xhtml con l'obiettivo di riuscire a trovare all'interno di un qualunque file (x)html i vari tag che lo compongono.in particolare ho usato il package htmlparser che ha numerose funzionalità ma siccome sono un novellino di java ho trovato un pò di difficoltà nell'utilizzo dell'interfaccia Tag presente nel package.Fin'ora sono riuscito a trovare i Tag in questo modo:
    public class Main {



    public static void main(String[] args) {

    try{
    Parser p= new Parser("c:\\about.html"); // about.html è un file xhtml

    NodeList list=new NodeList();
    NodeFilter filter=new TagNameFilter("body");

    for(NodeIterator e=p.elements();e.hasMoreNodes(){

    e.nextNode().collectInto(list,filter);
    list.keepAllNodesThatMatch(filter);

    }
    for(int i=0;i<list.size();i++){
    System.out.println("il primo elemento della lista è: " + list.elementAt(0).getText()); //questo stampa body che è sicuramente il primo elemento della lista
    System.out.println("tag e sottotag :" + list.toHtml());
    //questo mi stampa il contenuto del tag body + sottotag
    }


    }


    catch(Exception e ){
    e.printStackTrace();
    }
    }

    }


    il mio problema è che però dopo aver trovato il tag dovrei poter aggungervi un evento di tipo onload andando quindi a modificare il file xhtml d'origine .c'è qualcuno che può aiutarmi??
    f4s4n0

  2. #2
    Per aggiungere l'attributo onload puoi fare così:

    codice:
    ( ( TagNode )list.elementAt( 0 ) ).setAttribute( "onload", "doWork()" );
    Poi puoi salvare il nuovo albero xhtml in un altro file:

    codice:
    PrintWriter writer = new PrintWriter( 
          new FileOutputStream( "C:\\about_modified.html" ) ); 
    writer.print( list.toHtml( ) );
    writer.close();
    Ciao,

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    99
    grazie mille per la risposta tempestiva ed esaustiva ma visto che hai afferrato alvolo il mio problema posso approfittarne per chiederti come faccio una volta modificato il mio tag a far tornare il mio file originale a cui pero ho applicato la modifica???mi spiego meglio...quando faccio la keepallnodethatmatch la mia nodelist list conterrà soltanto tag body e relativi sottotag+ modifica ma io voglio una aboutmodified che contenga tutti i tag del file html originale + la modifica...dovrei quindi attaccare la mia list modificata al file orig....come faccio??grazie
    f4s4n0

  4. #4
    Originariamente inviato da f4s4n0
    come faccio una volta modificato il mio tag a far tornare il mio file originale a cui pero ho applicato la modifica?
    Ti conviene utilizzare uno o più oggetti Visitor, implementando il tuo visitor che effettua le modifiche ai tag che ti interessano; ad esempio, per modificare il body puoi crearti un BodyVisitor fatto così:
    codice:
    class BodyVisitor extends NodeVisitor
    {
      @Override
      public void visitTag( Tag tag )
      {
        if ( tag instanceof BodyTag )
        {
        	tag.setAttribute( "onload", "doWork()" );
        }		
      }
    }
    Poi visiti tutti i nodi della lista con il visitor e alla fine ti ritrovi la lista con i nodi modificati:
    codice:
    Parser p = new Parser( "c:\\about.html" ); 
    NodeList list = new NodeList();
    list = p.parse( null );
    list.visitAllNodesWith( new BodyVisitor() );
    System.out.println( list.toHtml() ); // qui stampa il documento modificato
    Spero di essere stato sufficientemente chiaro.

    Ciao,

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    99
    sei stato chiarissimo e sono riuscito con il vostro aiuto a risolvere i miei problemi.
    grazie mille a entrambi
    f4s4n0

  6. #6
    Devo fare anche io una cosa del genere, con l'unica differenza che devo prendere le informazioni da determinati tag. Io sono abituato a fare il parsing di file xml e volevo sapere se mi devo comportare alla stesas maniera.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.