Baixei o XStream 1.1.3 (versão estável) e estava usando e gostando bastante. Depois de ler Xml usando tags simples fui tentar ler uma pegando o valor de um atributo de uma delas e não consegui. No tutorial do site existe um método aliasAttribute() e no meu objeto esse método não aparece de forma alguma.
Alguém sabe como ler o valor de um atributo de uma tag usando o XStream (1.1.3)?
Tem alguns emails perguntando isso na mailing list deles. E a resposta é simples: eles não dão suporte built-in para leitura de atributos.
Se você não pode trabalhar do jeito que eles recomendam, terá que escrever seu próprio converter. Não é muito difícil, aqui um exemplo bobo para sacar como faz:
publicclassComponentConverterimplementscom.thoughtworks.xstream.converters.Converter{// transforma XML em ObjetospublicObjectunmarshal(HierarchicalStreamReaderreader,UnmarshallingContextcontext){Stringtype=reader.getNodeName();Stringcodigo=reader.getAttribute("codigo");returnnull;}publicbooleancanConvert(Classtype){returntype.equals(MyClass.class);}// transforma Objetos em XMLpublicvoidmarshal(Objectsource,HierarchicalStreamWriterwriter,MarshallingContextcontext){}}
Leia a documentação das classes HierarchicalStreamReader, UnmarshallingContext, HierarchicalStreamWriter e MarshallingContext.
M
marxfred
Oh amigo, parace que vc ta garrado no “Cadastro Sincronizado Nacional”.
Boa sorte ai fi
bandrade
Ou voce pode fazer usando XSLT…
Dentro do dominio do seu app, usa da maneira do XStream, quando for fazer algo externo, passa um XSLT e pronto.
Tive um problema parecido: Um elemento do XML precisava da tag CDATA para comunicação externa e o serializador/deserializador que utilizei não colocava…
depois no seu codigo você chama da seguinte maneira
SuaClassesuaClasse=newSuaClasse();suaClasse.setUmAtributoStringQualquer("1");xstream.alias("NOME DA TAG QUE VC QUER",SuaClasse.class);xstream.useAttributeFor(SuaClasse.class,"atributoQueQuerImprimir");xstream.registerConverter(newModifyClass());