patastronch |
Bon j'ai trouvé une solution, je sais pas si c est du tres propre mais bon ca marche.
Je la met ici pour ceux qui tomberait sur ce probleme (je sais je sais, je programme tres mal) et qui serait interessé par comment faire :
Code :
- import java.io.*;
- import java.net.*;
- import javax.swing.text.*;
- import javax.swing.text.html.*;
- // Classe dérivée de HTMLDocument pour permettre de spécifier
- // un reader différent dans la méthode getReader ()
- public class TableHTMLParser extends HTMLDocument
- {
- // variables pour trouver le n ieme tableau
- int tableNum=1;
- int numTableCherche;
- //countTable permetra de s'assurer qu 'on est pas dans un tableau imbriqué dans un autre.
- int countTable=0;
- //les debloks vont permetre de metre des verrous sur les tableau imbriqué au tableau que l on parse.
- boolean deblokTable=false;
- boolean deblokTr=false;
- boolean deblokTd=false;
- // taille du tableau
- int lig=0;
- int col=0;
- // case en cours d'analyse
- int l=0;
- int c=0;
- // tableau
- String [][] table;
- // reader
- LinkReader readeur = new LinkReader();
-
- // Constructeur
- public TableHTMLParser (URL file,int tabNum)
- {
- // Mémorisation de la base du fichier HTML
- setBase (file);
- numTableCherche=tabNum;
- table = new String[1][1];
- }
-
- // permet de modifier la taille du tableau de ligMore ligne de plus et de colMore colonne de plus
- private String[][] majTab (int ligMore,int colMore)
- {
- String[][] temp;
- if (lig+ligMore>=1) {
- if (col+colMore>=1){
- temp = new String[lig+ligMore][col+colMore];
- }else{
- temp = new String[lig+ligMore][1];
-
- }
- }else if (col+colMore>=1){
- temp = new String[1][col+colMore];
- }else{
- temp = new String[1][1];
- }
-
- for (int i=0;i<lig;i++){
- for (int j=0;j<col;j++){
- if (table[i][j]==null)
- table[i][j]="";
- temp[i][j]=table[i][j];
- }
- }
- return temp;
- }
- // Méthode outrepassée pour fournir un reader différent
- public HTMLEditorKit.ParserCallback getReader (int pos)
- {
- return new LinkReader ();
- }
-
-
- // Les méthodes de cette classe sont rappelées par
- // le parser HTML suivant les différents tag HTML lus.
- private class LinkReader extends HTMLEditorKit.ParserCallback
- {
-
-
- // Méthode appelée quand un tag de début est rencontré
- public void handleStartTag (HTML.Tag tag, MutableAttributeSet att, int pos)
- {
-
- if (tag.equals (HTML.Tag.TABLE) && !deblokTable) // Tags <TABLE>
- {
- if (tableNum == numTableCherche) {
- deblokTable=true;
- l=0;
- c=0;
- }else{
- tableNum++;
- }
- }else if (tag.equals (HTML.Tag.TABLE) && deblokTable) {
- countTable++;
- }else if (tag.equals (HTML.Tag.TR) && deblokTable && countTable==0) // Tags <TR>
- {
- deblokTr=true;
- table=majTab(1,0);
- lig++;
- l++;
- c=0;
- }else if ((tag.equals(HTML.Tag.TD) || tag.equals (HTML.Tag.TH)) && deblokTr && countTable==0) // Tags <TD>
- {
- deblokTd=true;
- if (col==c){
- table=majTab(0,1);
- col++;
- }
- c++;
- }
-
-
-
- }
-
-
-
-
- public void handleEndTag (HTML.Tag tag,int pos)
- {
-
- if ((tag.equals (HTML.Tag.TD) || tag.equals (HTML.Tag.TH)) && deblokTr && countTable==0) // Tags <TD>
- deblokTd=false;
-
- if (tag.equals (HTML.Tag.TR) && deblokTable && countTable==0)
- deblokTr=false;
-
- if (tag.equals (HTML.Tag.TABLE) && deblokTable && countTable==0)
- deblokTable=false;
-
- if (tag.equals (HTML.Tag.TABLE) && countTable>0)
- countTable--;
- }
-
-
- public void handleText(char[] data,int pos)
- {
- if (deblokTd){
- if (table[l-1][c-1]==null)
- table[l-1][c-1]="";
- for (int i=0;i<data.length;i++){
- table[l-1][c-1]=table[l-1][c-1]+Character.toString(data[i]);
- }
- }
- }
- public void handleEndOfLineString(String eol)
- {
- String ligne="";
-
- for (int i=0;i<lig;i++){
- for (int j=0;j<col;j++){
- ligne+="|"+table[i][j];
- }
- System.out.println (ligne+"\n" );
- ligne="";
- }
- }
-
-
- }
-
- private static void parse(URL url, String encoding) throws IOException {
- ParserGetter kit = new ParserGetter();
- HTMLEditorKit.Parser parser = kit.getParser();
- InputStream in = url.openStream();
- InputStreamReader r = new InputStreamReader(in, encoding);
- TableHTMLParser doc = new TableHTMLParser(url,1);
- parser.parse(r, (HTMLEditorKit.ParserCallback)doc.readeur, true);
-
-
- }
-
- public static void main(String[] args) {
- ParserGetter kit = new ParserGetter();
- HTMLEditorKit.Parser parser = kit.getParser();
-
- String encoding = "ISO-8859-1";
- URL url = null;
- try {
- url = new URL ("file:C:/tip3.html" );
- InputStream in = url.openStream();
- InputStreamReader r = new InputStreamReader(in,encoding);
-
- // on parse une premiere fois pour connaitre l'encoding
- HTMLEditorKit.ParserCallback doNothing = new HTMLEditorKit.ParserCallback();
- parser.parse(r, doNothing, false);
-
-
-
- }
- catch (MalformedURLException ex) {
- System.err.println(ex);
- return;
- }
- catch (ChangedCharSetException ex) {
- String mimeType = ex.getCharSetSpec();
- encoding = mimeType.substring(mimeType.indexOf("=" ) + 1).trim();
- }
- catch (IOException ex) {
- System.err.println(ex);
- }
- catch (ArrayIndexOutOfBoundsException ex) {
- System.err.println(ex);
- return;
- }
-
- try {
- parse(url, encoding);
- }
- catch(IOException ex) {
- System.err.println(ex);
- }
-
- }
- }
|
|