Oi pessoal, bom estou precisando extrair os dados de um log e depois inserir eles em um BD, criei um método que extrairia os dados do log
//Obtem os dados do log
public ArrayList<Message> getDados(File arquivo) throws ParserConfigurationException, SAXException,IOException, XPathExpressionException
{
Message message = new Message();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(arquivo);
NodeList bodys = doc.getElementsByTagName("body");
ArrayList<Message> messages = new ArrayList<Message>();
for (int i = 0; i < bodys.getLength(); i++)
{
Node nodeBody = bodys.item(i);
//Extrai o texto do no Body
/*if (nodeBody.hasChildNodes())
{
message.setMessage(nodeBody.getFirstChild().getTextContent().toString());
}
else
{*/
message.setMessage(nodeBody.getTextContent().toString());
//}
//Extrai os atributos do "message" pai do no body corrente
Attr attr;
Node nodeMessage = nodeBody.getParentNode();
for (int j=0; j < nodeMessage.getAttributes().getLength();j++)
{
attr = (Attr)nodeMessage.getAttributes().item(j);
if (attr.getName()=="to")
{
message.setTo(attr.getValue());
}
else if (attr.getName()=="from")
{
message.setFrom(attr.getValue());
}
else if (attr.getName()=="type")
{
message.setType(attr.getValue());
}
else if (attr.getName()=="id")
{
message.setId(attr.getValue());
}
}
//Extrai os atributos do "packet" avo do no body corrente
Node nodePacket = nodeMessage.getParentNode();
for (int j=0; j < nodePacket.getAttributes().getLength();j++)
{
attr = (Attr)nodePacket.getAttributes().item(j);
if (attr.getName()=="timestamp")
{
message.setTimeStamp(attr.getValue());
}
}
messages.add(message);
}
return messages;
}
O interessante é que tento imprimir os valores vai tudo ok internamente nesse método, porem quando passo os valores para o outro método ele simplesmente so retorna o ultimo elemento do ArrayList, segue a outra função:
public static void main(String[] args) throws Exception
{
Connection connection = null;//gerencia conexão
PreparedStatement stmt = null;//instrução de consulta
//O diretorio dos logs
String urlDiretorio = "C:/Java/log xml/conversas";
File diretorio = new File(urlDiretorio);
//Arquivos no diretorio
String arquivos[] = diretorio.list();
File arquivoXml;
Xml xml = new Xml();
//conecta-se ao banco de dados e o consulta
try
{
Class.forName( JDBC_DRIVER );//carrega a classe de driver do banco de dados
//estabelece conexão com o banco de dados
connection = DriverManager.getConnection (DATABASE_URL, "ADMINLOG","ADMIN");
//cria Statement para consultar banco de dados
//statement = connection.createStatement();
//cria um preparedStatement
stmt = connection.prepareStatement("INSERT INTO LOG (\"ID\",\"TO\",\"FROM\",\"MESSAGE\",\"TYPE\") VALUES (?,?,?,?,?)");
for (int i=0; i < arquivos.length; i++)
{
arquivoXml = new File(urlDiretorio+"/"+arquivos[i]);
if (arquivoXml.isFile())
{
String conteudoArquivo = xml.retArq(arquivoXml = new File(urlDiretorio+"/"+arquivos[i]));
conteudoArquivo =conteudoArquivo.substring(conteudoArquivo.length()-7);
String jive = "</jive>";
if (!conteudoArquivo.equalsIgnoreCase(jive))
xml.fechaXml(urlDiretorio+"/"+arquivos[i]);
ArrayList<Message> messages = new ArrayList<Message>();
messages = xml.getDados(arquivoXml = new File(urlDiretorio+"/"+arquivos[i]));
for (int j=0;j<messages.size();j++)
{
System.out.println("Mensagem: "+messages.get(j).getMessage());
System.out.println("Id: "+messages.get(j).getId());
System.out.println("From: "+messages.get(j).getFrom());
System.out.println("To: "+messages.get(j).getTo());
System.out.println("Type: "+messages.get(j).getType());
System.out.println(messages.get(j).getTimeStamp());
// preenche os valores
stmt.setString(1, messages.get(j).getId());
stmt.setString(2, messages.get(j).getTo());
stmt.setString(3, messages.get(j).getFrom());
stmt.setString(4, messages.get(j).getMessage());
stmt.setString(5, messages.get(j).getType());
//executa
//stmt.execute();
}
System.out.println("Gravado!");
File destino = new File (urlDiretorio+"/backups/"+arquivos[i]);
//arquivoXml.renameTo(destino);
}
}
}
catch ( SQLException sqlException)
{
sqlException.printStackTrace();
System.exit(1);
}//fim do catch
catch (ClassNotFoundException classNotFound)
{
classNotFound.printStackTrace();
System.exit(1);
}//fim do catch
finally//asegura que a instrução e a conexão são fechadas adequadamente
{
try
{
stmt.close();
connection.close();
}//fim do try
catch ( Exception exception )
{
exception.printStackTrace();
System.exit(1);
}//fim do catch
}//fim do finally
}//fim de main
Gostaria de um conselho, se alguém sugerir uma forma de melhorar meu código também seria muito bem-vinda (este é meu primeiro programinha em Java
)
Agradeço pela ajuda desde já.
Edit:
Quase esqueci de falar eu fiz o POG para obter os atributos de uma tag, porque o método “getAttribute” simplesmente não esta sendo reconhecido aqui na minha maquina 