Recuperar tag de comentario em XML com XStream

6 respostas
B

Boa Tarde!

Estou manipulando uma estrutura XML com XStream e me deparei com uma situação que acredito que não seja tão comum. Preciso fazer a leitura de tags de comentário deste XML. Um exemplo da minha estrutura atual:

<estrutura> ... <!-- 2011-07-06 16:00:00 --> <coluna> <valor>1234</valor> <valor>5678</valor> </coluna> <!-- 2011-07-06 16:05:00 --> <coluna> <valor>8888</valor> <valor>9999</valor> </coluna> <!-- 2011-07-06 16:10:00 --> <coluna> <valor>5535</valor> <valor>2222</valor> </coluna> ... </estrutura>

Minha estrutura é bem maior que esta, e já faço toda leitura do arquivo, porém postei apenas a parte que interessa.
Gostaria de alguma dica de como recuperar as tags de comentários, utilizando XStream.

Obrigado!

6 Respostas

dreampeppers99

brunovisk:
Boa Tarde!

Estou manipulando uma estrutura XML com XStream e me deparei com uma situação que acredito que não seja tão comum. Preciso fazer a leitura de tags de comentário deste XML. Um exemplo da minha estrutura atual:

<estrutura> ... <!-- 2011-07-06 16:00:00 --> <coluna> <valor>1234</valor> <valor>5678</valor> </coluna> <!-- 2011-07-06 16:05:00 --> <coluna> <valor>8888</valor> <valor>9999</valor> </coluna> <!-- 2011-07-06 16:10:00 --> <coluna> <valor>5535</valor> <valor>2222</valor> </coluna> ... </estrutura>

Minha estrutura é bem maior que esta, e já faço toda leitura do arquivo, porém postei apenas a parte que interessa.
Gostaria de alguma dica de como recuperar as tags de comentários, utilizando XStream.

Obrigado!


Porque nao fazer do comentario um atributo (nao elemento) de coluna?

JoaoBluSCBR

Cara, desculpe o mal jeito, mas se uma informação precisa ser recuperada, ela precisa estar entre tags válidos.

Se o comentário é uma informação importante, ele não devia estar em comentário.

Quem montou esse XML e colocou esses comentários ali, poderia muito bem colocar essas informações em tags válidas de algum tipo.

Comentários em XML são anotações para uso interno de quem o produziu para que tiver de dar manutenção posterior.

Não podem ser usados para guardar informação válida e essencial.

B

dreampeppers99 e JoaoBluSCBR,

Obrigado pelo retorno.

Mas na verdade recebo este XML de uma outra aplicação, ja recebo a estrutura definida. Só faço a leitura.

Este XML é gerado automaticamente de hora em hora por esta outra aplicação que citei, e esta tag de comentário com a hora sempre vai existir entre as tags <coluna>.

Obrigado!

dreampeppers99

Podes usar outro parser ou mesmo regex, mas acho que deve insistir que esse atributo seja persistido.

JoaoBluSCBR

brunovisk:
dreampeppers99 e JoaoBluSCBR,

Obrigado pelo retorno.

Mas na verdade recebo este XML de uma outra aplicação, ja recebo a estrutura definida. Só faço a leitura.

Este XML é gerado automaticamente de hora em hora por esta outra aplicação que citei, e esta tag de comentário com a hora sempre vai existir entre as tags <coluna>.

Obrigado!

Até entendo, mas essa outra aplicação deve vir de uma empresa que pode ser contatada e pedir que coloquem essa informação como atributo.

Seria até uma contribuição explicando o motivo.

Bem, se você não tem como mudar isso, o negócio é ler o arquivo como texto e coletar as informações, mas vai ser uma trabalheira meio insana. kkkkkk

Se o teu exemplo é fiel, o primeiro horário vem seguido do segundo de 5 em 5 minutos.

Então bastaria ler o primeiro comentário para saber a hora inicial e

depois usar SAX e ler separando e sabendo que as informações são de tanto em tanto tempo após.

Só uma idéia.

JoaoBluSCBR

Ou crie seu próprio parser extendendo um outro.

E sobrescreva o método em que ele descarta os comentários
com um seu que faça a leitura deles.

Algo assim:

import javax.xml.parsers.*;
import org.xml.sax.Parser;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;

public class NovoParser extends SAXParser {

    @Override
    public Parser getParser() throws SAXException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public XMLReader getXMLReader() throws SAXException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean isNamespaceAware() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean isValidating() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}
Criado 6 de julho de 2011
Ultima resposta 6 de jul. de 2011
Respostas 6
Participantes 3