Html Table Validator

4 respostas
marciolx

Alguém conhece algum software (simples) para analizar as tabelas de um documento html? por exemplo, se falta abrir ou fechar algum table, tr ou td?

4 Respostas

cv1

O Validator do W3C nao ajuda?

http://validator.w3.org

marciolx

“cv”:
O Validator do W3C nao ajuda?

http://validator.w3.org

Sim, é muito bom, mas eu queria algo mais simples, tipo um parser só para os table’s mesmo que contasse quantos foram abertos e quantos forem fechados incluindo os colspan/rowspan.

marciolx

Algo mais ou menos assim:

import java.io.*;
import java.util.*;

public class ContaTable {
	private String [] getLinhasArquivo (String nomeArquivo) {
		ArrayList arr = new ArrayList();
		try {
			FileReader fr = new FileReader(nomeArquivo);
			BufferedReader b = new BufferedReader(fr);
			String s;
			while ((s=b.readLine())!=null) {
				arr.add(s+"
");
			}
		} catch (Exception e) {
			System.err.println("Erro ao abrir o arquivo: "+e.toString());
		}
		String [] retorno = (String[]) arr.toArray(new String[0]);
		return retorno;
	}
	private void imprimeTagsTable(String [] linhas) {
		int contaAbreTable = 0;
		int contaFechaTable = 0;
		int contaAbreTr = 0;
		int contaFechaTr = 0;
		int contaAbreTd = 0;
		int contaFechaTd = 0;
		for (int i = 0; i < linhas.length; i++) {
			if (linhas[i].toUpperCase().indexOf("<TABLE")!=-1) contaAbreTable++;
			if (linhas[i].toUpperCase().indexOf("</TABLE")!=-1) contaFechaTable++;
			if (linhas[i].toUpperCase().indexOf("<TR")!=-1) contaAbreTr++;
			if (linhas[i].toUpperCase().indexOf("</TR")!=-1) contaFechaTr++;
			if (linhas[i].toUpperCase().indexOf("<TD")!=-1) contaAbreTd++;
			if (linhas[i].toUpperCase().indexOf("</TD")!=-1) contaFechaTd++;
		}
		System.out.println("numero de tags <table> : " + contaAbreTable);
		System.out.println("numero de tags </table> : " + contaFechaTable);
		System.out.println("numero de tags <tr> : " + contaAbreTr);
		System.out.println("numero de tags </tr> : " + contaFechaTr);
		System.out.println("numero de tags <td> : " + contaAbreTd);
		System.out.println("numero de tags </td> : " + contaFechaTd);
		System.out.println();
		System.out.println("Analise:");
		if (contaAbreTable==contaFechaTable)
			System.out.println("o numero de tags TABLE esta correto");
		else if (contaAbreTable>contaFechaTable)
			System.out.println("Falta(m) fechar " + (contaAbreTable - contaFechaTable) + " tag(s) TABLE");
		else
			System.out.println("Falta(m) abrir " + (contaFechaTable - contaAbreTable) + " tag(s) TABLE"); 
		if (contaAbreTr==contaFechaTr)
			System.out.println("o numero de tags TR esta correto");
		else if (contaAbreTr>contaFechaTr)
			System.out.println("Falta(m) fechar " + (contaAbreTr - contaFechaTr) + " tag(s) TR");
		else
			System.out.println("Falta(m) abrir " + (contaFechaTr - contaAbreTr) + " tag(s) TR"); 
		if (contaAbreTd==contaFechaTd)
			System.out.println("o numero de tags TD esta correto");
		else if (contaAbreTd>contaFechaTd)
			System.out.println("Falta(m) fechar " + (contaAbreTd - contaFechaTd) + " tag(s) TD");
		else
			System.out.println("Falta(m) abrir " + (contaFechaTd - contaAbreTd) + " tag(s) TD"); 
	}

	public static void main(String [] args) { 
		ContaTable ct = new ContaTable();
		ct.imprimeTagsTable(ct.getLinhasArquivo(args[0]));
	}
}

Ex.:

java ContaTable teste.htm

numero de tags <table> : 23
numero de tags </table> : 22
numero de tags <tr> : 52
numero de tags </tr> : 52
numero de tags <td> : 156
numero de tags </td> : 155

Analise:
Falta(m) fechar 1 tag(s) TABLE
o numero de tags TR esta correto
Falta(m) fechar 1 tag(s) TD
marciolx

Agora sim! :smiley:

Isso aqui resolveu meus problemas:

Criado 12 de dezembro de 2003
Ultima resposta 29 de dez. de 2003
Respostas 4
Participantes 2