Extraindo conteúdo Links HTML

Olá pessoal,

Estou precisando retirar as tags de um arquivo HTML (o que já existe um tópico aqui no fórum), mas além disso preciso extrair as informações referentes aos links (URL e texto referente ao link). Alguém saberia como poderia fazer isso usando a javax.swing.text.html?

Um exemplo:
TEXTO QUE EU QUERO

Eu precisava mostrar o texto do link e a URL referente à esse link!

Valeu galera…

Olá Bruno,

Dei uma olhada muito rápida, vê se te ajuda … http://www.guj.com.br/posts/list/40780.java

Boa Sorte!
Roger Leite

Vlw mas eu tinha visto esse post anteriormente.
Como eu disse eu também precisava pegar o texto referente ao link (não somente o href="…"). Estou usando o HTML Parser da própria SUN e quando eu pego todo o texto do HTML não consigo fazer o controle de saber onde está localizada a TAG …<\A> para poder especificar que ali foi encontrado um link e mostrá-lo.

Obrigado mesmo assim Roger

Bom, não sei se este é o melhor jeito (você não pode usar expressão regular ?),
aqui (http://www.javafaq.nu/java-example-code-656.html) tem um exemplo de HTML Parser Listener,
no seu caso você teria que adaptá-lo a um tipo de HTML “Link” ParserListener …

Estou sem jdk aqui no momento para ajudá-lo com código.

flw !
Roger Leite

Ae esse último post ajudou bastante…
Faltava ler como funcionava a API e eu percebi que ela possui chamadas em CallBack, dessa forma toda vez que o parser encontra alguma tag eu posso usar o método handleStartTag() para extrair informações referente àquela tag específica. Vou postar o código que eu fiz aqui como exemplo:

import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;
import java.io.*;
import java.net.*;
import java.util.*;

public class MeuParser extends HTMLEditorKit.ParserCallback {
    
    private Writer out;
    private int level = 0;
    private static StringBuffer buf = new StringBuffer();
    static String textofinal = "";
    
    public void handleText(char[] text, int position) { 
        //System.out.println(new String(text).trim());
        textofinal = textofinal + new String(text).trim() + " ";
    }
    
    public void handleStartTag( HTML.Tag t,MutableAttributeSet a, int pos) {
        //System.out.println("start: " + t);
        if (t==HTML.Tag.A && a!=null) {
            String hrefValue = (String)a.getAttribute(HTML.Attribute.HREF);
            //System.out.println("<Endereço do link: " + hrefValue+">");
            textofinal = textofinal + "<Endereço do link: " + hrefValue+">" + " ";
        }        
    }
    public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos){
        if (t==HTML.Tag.IMG && a!=null) {
            String srcValue = (String)a.getAttribute(HTML.Attribute.ALT);
            //System.out.println("<Nome da imagem: " + srcValue+">");
            textofinal = textofinal + "<Nome da imagem: " + srcValue+">" + " ";
        }
        
    }
    public static void main(String[] args) {
        ParserGetter kit = new ParserGetter();
        HTMLEditorKit.Parser parser = kit.getParser();
        try {
            URL u = new URL("file:///F:/Projeto1.html");
            InputStream in = u.openStream();
            InputStreamReader r = new InputStreamReader(in);
            HTMLEditorKit.ParserCallback callback = new MeuParser();
            parser.parse(r, callback, true);
            System.out.println(textofinal);
        } catch (Exception e) {
            System.err.println(e);
        }
        //outra maneira de ler o arquivo
        /*try {            
            Reader r = new FileReader("c:/Projeto1.html");            
            ParserDelegator parser = new ParserDelegator();            
            HTMLEditorKit.ParserCallback callback = new MeuParser();            
            parser.parse(r, callback, true);            
            System.out.println(textofinal);            
        } catch (IOException e) {            
            e.printStackTrace();            
        }        */
    }   
}

Fantástico !
Agora só falta um “resolvido” no assunto.

sucesso!
Roger Leite