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?
Html Table Validator
4 Respostas
O Validator do W3C nao ajuda?
O Validator do W3C nao ajuda?
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.
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
Agora sim! 
Isso aqui resolveu meus problemas:
Criado 12 de dezembro de 2003
Ultima resposta 29 de dez. de 2003
Respostas 4
Participantes 2