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!
[quote=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![/quote]
Porque nao fazer do comentario um atributo (nao elemento) de coluna?
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.
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!
Podes usar outro parser ou mesmo regex, mas acho que deve insistir que esse atributo seja persistido.
[quote=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![/quote]
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.
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.");
}
}