Commons Digester para ler, XML Vomiter para escrever

1 resposta
renatosilva

O que acham do seguinte código:

package br.com.yahoo.renato3110.xmlvomiter.demo;

import java.util.*;
import br.com.yahoo.renato3110.xmlvomiter.*;

public class VomitDemo {    

	class Evangelion implements Vomitable {
		public String name;
		public String type;
		public String pilot;
		
		public Evangelion (String name, String type, String pilot) {
			this.name = name;
			this.type = type;
			this.pilot = pilot; 
		}
		
		public String getAsXML(XMLFormatter f){

			StringBuffer sb = new StringBuffer();

			sb.append(f.formatAs("type", type)).append("\n");
			sb.append(f.formatAs("pilot", pilot));

			f.addAttribute("name", name);
			f.setIndent(true); 

			return f.formatAs("evangelion", sb.toString()); 

		}
	}
    
    public VomitDemo() {
    	
		List l = new LinkedList();
		
		l.add(new Evangelion("Eva-00", "Prototype", "Rei Ayanami"));
		l.add(new Evangelion("Eva-02", "Production", "Asuka Langley Soryu"));
		l.add(new Evangelion("Eva-03", "S2 Engine", "Touji Suzuhara"));
		l.add(new Evangelion("Eva-04", "S2 Engine", "Kaworu?"));		
		l.add(new Evangelion("Eva-05", "Mass Production", "Dummy Plug"));
		l.add(new Evangelion("Eva-06", "Mass Production", "Dummy Plug"));
		l.add(new Evangelion("Eva-07", "Mass Production", "Dummy Plug"));
		l.add(new Evangelion("Eva-08", "Mass Production", "Dummy Plug"));
		l.add(new Evangelion("Eva-09", "Mass Production", "Dummy Plug"));
		l.add(new Evangelion("Eva-10", "Mass Production", "Dummy Plug"));
		l.add(new Evangelion("Eva-11", "Mass Production", "Dummy Plug"));
		l.add(new Evangelion("Eva-12", "Mass Production", "Dummy Plug"));
		l.add(new Evangelion("Eva-13", "Mass Production", "Dummy Plug"));
		
		XMLFormatter f = new XMLFormatter();
		
		f.setIndent(true);
		
		f.addCData("Neon Genesis Evangelion\nGod is in his sky. It'a all right with the world.");
		f.addComment("Zankoku na tenshi no teeze\nShounen yo shinwa ni nare");
		                 
		
		f.addElement("evangelions", "default-evangelion", l);

		f.addDeclaration("<?xml version=\"1.0\"?>");
		f.addDeclaration("<!--Evangelions como XML:-->");
		
		System.out.println(f.formatAs("evangelion-world"));
		
		// No caso abaixo não precisamos definir um elemento pai de evangelions, mas o conteúdo
		// adicionado por addCData ficaria fora do elemento raiz o que invalida um XML 
		 
		// System.out.println(f.getDeclarations() + "\n" + f.getContent());                   
    }
    
    public static void main(String[] args) {
    	new VomitDemo();
    }
}

Que gerou a seguinte saída:

<?xml version="1.0"?>
<!--Evangelions como XML:-->
<evangelion-world>
  <![CDATA[
    Neon Genesis Evangelion
    God is in his sky. It'a all right with the world.
  ]]>
  <!--
    Zankoku na tenshi no teeze
    Shounen yo shinwa ni nare
  -->
  <evangelions>
    <evangelion name="Eva-00">
      <type>Prototype</type>
      <pilot>Rei Ayanami</pilot>
    </evangelion>
    <evangelion name="Eva-02">
      <type>Production</type>
      <pilot>Asuka Langley Soryu</pilot>
    </evangelion>
    <evangelion name="Eva-03">
      <type>S2 Engine</type>
      <pilot>Touji Suzuhara</pilot>
    </evangelion>
    <evangelion name="Eva-04">
      <type>S2 Engine</type>
      <pilot>Kaworu?</pilot>
    </evangelion>
    <evangelion name="Eva-05">
      <type>Mass Production</type>
      <pilot>Dummy Plug</pilot>
    </evangelion>
    <evangelion name="Eva-06">
      <type>Mass Production</type>
      <pilot>Dummy Plug</pilot>
    </evangelion>
    <evangelion name="Eva-07">
      <type>Mass Production</type>
      <pilot>Dummy Plug</pilot>
    </evangelion>
    <evangelion name="Eva-08">
      <type>Mass Production</type>
      <pilot>Dummy Plug</pilot>
    </evangelion>
    <evangelion name="Eva-09">
      <type>Mass Production</type>
      <pilot>Dummy Plug</pilot>
    </evangelion>
    <evangelion name="Eva-10">
      <type>Mass Production</type>
      <pilot>Dummy Plug</pilot>
    </evangelion>
    <evangelion name="Eva-11">
      <type>Mass Production</type>
      <pilot>Dummy Plug</pilot>
    </evangelion>
    <evangelion name="Eva-12">
      <type>Mass Production</type>
      <pilot>Dummy Plug</pilot>
    </evangelion>
    <evangelion name="Eva-13">
      <type>Mass Production</type>
      <pilot>Dummy Plug</pilot>
    </evangelion>
  </evangelions>
  
</evangelion-world>

Dífícil? Fácil? Horrível? Legalzinho? Este tópico é horrível?

1 Resposta

Rafael_Steil

Hm, acho que http://xstream.codehaus.org/ ja faz isso para vc :slight_smile:

Rafael

Criado 27 de dezembro de 2004
Ultima resposta 27 de dez. de 2004
Respostas 1
Participantes 2