Tirar tags HTML de texto antes de salvar em banco

4 respostas
khichfy

Senhores
estou com uma duvida…
È o seguinte:

1 - Atraves de uma url obtive um arquivo XML
2 - Transformei o xml em Objeto (mandei um unmarshal)
3 - tal objeto tem varios campos, entre eles um chamado “noticia”.
4 - dou um get em noticia e mando salvar em banco atraves do hibernate.

o problema é que o texto vai com tags html (td, table, br, etc…) e quando mando um find da noticia, a mesma me aparece toda zuada…
sem falar na acentuação que vai zuada tb…

alguem indica um caminho para retirar essas tags antes de envia-la para o banco ?

valeu!!! :smiley:

4 Respostas

M
Num pedaço de código HTML, para retirar todas as tags HTML, mantendo apenas o texto presente, veja estas funções abaixo. A base é o médoto replaceAll da classe String.
/**
	 * Retira todas as tags HTML de um código HTML, devolvendo o texto restante.
	 * @param html HTML que terá as tags retiradas.
	 * @return texto sem tags HTML.
	 */
	public static String limpaHTML(String html) {
		return Conversor.seNulo(html) ? "" : html.replaceAll("<.*?>", " ").replaceAll("\s+", " ").trim();
	}
	
	/**
	 * Retira todas as tags HTML do corpo (tag <body>) de um código HTML, devolvendo o texto restante.
	 * Se o corpo (tag <body>) for localizado no HTML, a parte do cabeçalho (tag <head> é descartada),
	 * do contrário (tag <body> não encontrada), o funcionamento é como "limpaHTML".
	 * @param html HTML que terá as tags retiradas.
	 * @return texto sem tags HTML.
	 */
	public static String limpaBodyHTML(String html) {
		
		// verifica se alguma coisa foi passada
		if (Conversor.seNulo(html)) {
			return "";
		}
		
		// procura o corpo do html
		int p = html.toUpperCase().indexOf("<BODY>");
		
		// se achou, limpa a partir do corpo
		return limpaHTML(p >= 0 ? html.substring(p) : html);
	}
khichfy

legal cara!!
funcionou para um dado contexto do meu código…

Mas no meu texto aparece uns caracteres muito estranhos, como :

& aacute

& acirc; 	

& agrave; 	

& atilde; 	

& ccedil; 	

& eacute; 	

& ecirc; 	

& iacute; 	

& oacute; 	

& ocirc; 	

& otilde; 	

& uacute; 	

& uuml;

obs: coloquei um espaço entre “&” “uuml” senão o navegador converte para o acento correto… (fiz com todos)

eu tava vendo uma tabela na url :http://www.icmc.usp.br/ensino/material/html/especiais.html
que identifica cada um desses caracteres especiais…

seu código funcionou para tirar as tags classicas do html :slight_smile: valeu!
agora to tentando olhar internamente do JEditorPane para entender como ele consegue converter tudo relacionado a html em texto “normal”

mas ta sinistro… se souber de outra solução eu agradeço :slight_smile:

ate mais!

renzonuccitelli

Se você estiver recebendo um XML, só precisa ler o mesmo. Recomendo para leitura o http://sourceforge.net/projects/jcoltrane/
Espero ter ajudado

renzonuccitelli

Agora que vi que você só quer o campo notícia. Pelo que entendi, seria somente o corpo desse elemento. Se for isso, usa o JColtrane com essa classe:

public class BuscadorNoticia{ @EndElement(tag="noticia") public void obterNoticia(@Body String body){ //insira aqui a string no seu BD } }
Depois só colocar essa classe no construtor do JColtraneXMLHander e mandar parsear usando o parser do SAX (API padrão já presente na biblioteca do sistema).

Criado 16 de setembro de 2008
Ultima resposta 19 de set. de 2008
Respostas 4
Participantes 3