Serialization em um XML reduzido

6 respostas
zVictor

Estou fazendo um miniGame com direito a um editor de niveis que permita ao usuario salvar suas edições.
Pensei em usar o XStream para salvar os objetos, mas tornaria os arquivos XML desnecessariamente extensos. Tem algum meio de salvar e dpois ler arquivos em formato simplificado, como posicao? Ex.:


0,0
2,0

ou uma versão mais reduzida como:

P(0,0)
O(2,0)

6 Respostas

lgi2020

Eu não sei se entendi muito bem o que você quer…

De qualquer forma…

Com o Xstream, você pode definir aliases para os elementos do xml.
Dessaforma, você poderia ter algo como

<nvl1>
    <p>0,0</p>
    <o>2,0</o>
</nvl1>

Ficaria menor assim.

Abraços.

Pedrosa

Você pode usar o id references do Xtream:

xstream.setMode(XStream.ID_REFERENCES);

http://xstream.codehaus.org/graphs.html

zVictor

valeu pessoal, vou testar e em breve posto o resultado.

zVictor

eu consegui criar o XML como eu queria usando Converter

public class Conversor implements Converter {

	public boolean canConvert(Class classe) {
		if(classe.getGenericSuperclass().equals(Quadrado.class))
			return true;
		return false;
	}

	public void marshal(Object objeto, HierarchicalStreamWriter escritor,
			MarshallingContext contexto) {
		escritor.setValue(objeto.toString());
	}
o resultado fica assim:
<list>
  <Pe>0,0</Pe>
  <A>-3,0</A>
  <F>-2,0</F>
  <F>-1,0</F>
  <F>0,0</F>
  <F>1,0</F>
  <F>2,0</F>
  <A>3,0</A>
  <C>1,0</C>
  <C>-1,0</C>
  <Pa>-4,0</Pa>
  <Pa>4,0</Pa>
  <Pa>-4,1</Pa>
  <Pa>-3,1</Pa>
  <Pa>-2,1</Pa>
  <Pa>-1,1</Pa>
  <Pa>0,1</Pa>
  <Pa>1,1</Pa>
  <Pa>2,1</Pa>
  <Pa>3,1</Pa>
  <Pa>4,1</Pa>
  <Pa>-4,-1</Pa>
  <Pa>-3,-1</Pa>
  <Pa>-2,-1</Pa>
  <Pa>-1,-1</Pa>
  <Pa>0,-1</Pa>
  <Pa>1,-1</Pa>
  <Pa>2,-1</Pa>
  <Pa>3,-1</Pa>
  <Pa>4,-1</Pa>
</list>
O problema é pra desfazer o processo! eu n consigo, por exemplo, pegar a tag 0,0 e transformar em uma instancia da classe Personagem e, em seguida, instanciar a classe Alvo apartir da tag -3,0. Como criar instancias de classes q podem variar? Uma hora eu preciso que o metodo me retorne um personagem, outra hora um alvo, dpois uma caixa, parede, etc... No tutorial do site do XStream ele ensina a usar o metodo unmarshal, mas a classe a instanciar é fixa (Person).
public Object unmarshal(HierarchicalStreamReader reader,
                        UnmarshallingContext context) {
                Person person = new Person();
                reader.moveDown();
                person.setName(reader.getValue());
                reader.moveUp();
                return person;
        }
T

Amigo, não entendi ainda como é que são seus dados no XML. Se eu fosse desenhar um XML, iria primeiro desenhar uma árvore contendo os dados primeiro; do jeito que você fez, um arquivo-texto já resolveria seu problema, já que tem apenas um nível.

zVictor

tem apenas um nivel pq eu ainda nao estendi o jogo, e isso n interfere no problema. Como criar a instancia da classe indicada pelo XML?

Criado 24 de abril de 2008
Ultima resposta 5 de mai. de 2008
Respostas 6
Participantes 4