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?
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.
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.
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();
} */
}
}