Advertisement
mebonilla9

SAX and DOM Android

Feb 24th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.56 KB | None | 0 0
  1. /* Clase SAX */
  2. import android.os.Environment;
  3. import android.util.Log;
  4. import android.util.Xml;
  5.  
  6. import org.xmlpull.v1.XmlSerializer;
  7.  
  8. import java.io.File;
  9. import java.io.FileOutputStream;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12.  
  13. import javax.xml.parsers.SAXParser;
  14. import javax.xml.parsers.SAXParserFactory;
  15.  
  16. import co.gov.mintransporte.listaspersonalizadas.entidades.Contactos;
  17. import co.gov.mintransporte.listaspersonalizadas.negocio.Archivador;
  18. import co.gov.mintransporte.listaspersonalizadas.util.Manejador;
  19.  
  20. public class ArchivoSax implements Archivador {
  21.  
  22.     private final String RUTA_ARCHIVO = Environment.getExternalStorageDirectory()
  23.             .getAbsolutePath()+"/listas";
  24.  
  25.     public ArchivoSax() {
  26.         try {
  27.             File directorio = new File(RUTA_ARCHIVO);
  28.             if(!directorio.exists()){
  29.                 directorio.mkdirs();
  30.             }
  31.             Log.v("Creacion de carpeta","La carpeta se encuentra disponible");
  32.         } catch (Exception e) {
  33.             e.printStackTrace();
  34.         }
  35.     }
  36.  
  37.     @Override
  38.     public void escritura(List<Contactos> listaContactos) {
  39.         try {
  40.             XmlSerializer serializador = Xml.newSerializer();
  41.             serializador.setOutput(
  42.                     new FileOutputStream(
  43.                             new File(RUTA_ARCHIVO+"/contactos_sax.xml")
  44.                     ),
  45.                     "utf-8"
  46.             );
  47.             serializador.startDocument("utf-8",true);
  48.             serializador.startTag("","lista");
  49.             for(Contactos contacto : listaContactos){
  50.                 serializador.startTag("","contacto");
  51.  
  52.                 serializador.startTag("","nombre");
  53.                 serializador.text(contacto.getNombre());
  54.                 serializador.endTag("", "nombre");
  55.  
  56.                 serializador.startTag("", "edad");
  57.                 serializador.text(contacto.getEdad() + "");
  58.                 serializador.endTag("", "edad");
  59.  
  60.                 serializador.startTag("", "documento");
  61.                 serializador.text(contacto.getDocumento() + "");
  62.                 serializador.endTag("", "documento");
  63.  
  64.                 serializador.endTag("","contacto");
  65.             }
  66.             serializador.endTag("","lista");
  67.             serializador.endDocument();
  68.         } catch (Exception e) {
  69.             e.printStackTrace();
  70.         }
  71.  
  72.     }
  73.  
  74.     @Override
  75.     public List<Contactos> lectura() {
  76.         try {
  77.             SAXParserFactory fabricaSax = SAXParserFactory.newInstance();
  78.             SAXParser parser = fabricaSax.newSAXParser();
  79.             Manejador manejador = new Manejador();
  80.             parser.parse(
  81.                     new File(RUTA_ARCHIVO+"/contactos_sax.xml"),
  82.                     manejador
  83.             );
  84.             return manejador.getListaContactos();
  85.         } catch (Exception e) {
  86.             e.printStackTrace();
  87.         }
  88.         return new ArrayList<>();
  89.     }
  90. }
  91.  
  92. /* Clase DOM */
  93.  
  94. import android.os.Environment;
  95. import android.util.Log;
  96.  
  97. import org.w3c.dom.Document;
  98. import org.w3c.dom.Element;
  99. import org.w3c.dom.Node;
  100. import org.w3c.dom.NodeList;
  101.  
  102. import java.io.File;
  103. import java.util.ArrayList;
  104. import java.util.List;
  105.  
  106. import javax.xml.parsers.DocumentBuilder;
  107. import javax.xml.parsers.DocumentBuilderFactory;
  108. import javax.xml.transform.Transformer;
  109. import javax.xml.transform.TransformerFactory;
  110. import javax.xml.transform.dom.DOMSource;
  111. import javax.xml.transform.stream.StreamResult;
  112.  
  113. import co.gov.mintransporte.listaspersonalizadas.entidades.Contactos;
  114. import co.gov.mintransporte.listaspersonalizadas.negocio.Archivador;
  115.  
  116. /**
  117.  * Created by Lord_Nightmare on 13/11/15.
  118.  */
  119. public class ArchivoDom implements Archivador {
  120.  
  121.     private final String RUTA_ARCHIVO = Environment
  122.             .getExternalStorageDirectory().getAbsolutePath()+"/listas";
  123.  
  124.     public ArchivoDom(){
  125.         try {
  126.             File directorio = new File(RUTA_ARCHIVO);
  127.             if(!directorio.exists()){
  128.                 directorio.mkdirs();
  129.             }
  130.             Log.v("Creacion de carpeta","La carpeta se encuentra disponible");
  131.         } catch (Exception e) {
  132.             e.printStackTrace();
  133.         }
  134.     }
  135.  
  136.     @Override
  137.     public void escritura(List<Contactos> listaContactos) {
  138.         try {
  139.             // instancia de la fabrica de documentos
  140.             DocumentBuilderFactory fabricaDoc = DocumentBuilderFactory.newInstance();
  141.             // instancia del fabricante de documentos
  142.             DocumentBuilder fabricante = fabricaDoc.newDocumentBuilder();
  143.             // creacion del documento en memoria
  144.             Document documento = fabricante.newDocument();
  145.             Element elementoLista = documento.createElement("lista");
  146.             // Iterar lista de contactos con un foreach
  147.             for(Contactos contacto : listaContactos){
  148.                 Element elementoContacto = documento.createElement("contacto");
  149.  
  150.                 Element elementoNombre = documento.createElement("nombre");
  151.                 elementoNombre.setTextContent(contacto.getNombre());
  152.                 // incluir elemento de nombre al elemento de contacto
  153.                 elementoContacto.appendChild(elementoNombre);
  154.  
  155.                 Element elementoEdad = documento.createElement("edad");
  156.                 elementoEdad.setTextContent(contacto.getEdad() + "");
  157.                 elementoContacto.appendChild(elementoEdad);
  158.  
  159.                 Element elementoDocumento = documento.createElement("documento");
  160.                 elementoDocumento.setTextContent(contacto.getDocumento()+"");
  161.                 elementoContacto.appendChild(elementoDocumento);
  162.  
  163.                 elementoLista.appendChild(elementoContacto);
  164.             }
  165.             documento.appendChild(elementoLista);
  166.  
  167.             //Creacion de la fabrica de transformacion del documento
  168.             TransformerFactory fabricaTra = TransformerFactory.newInstance();
  169.             Transformer transformador = fabricaTra.newTransformer();
  170.             // asignar los recursos para generar el archivo plano
  171.             DOMSource origen = new DOMSource(documento);
  172.             StreamResult resultado = new StreamResult(
  173.                     new File(RUTA_ARCHIVO+"/contactos_dom.xml")
  174.             );
  175.             // transformar el archivo de memoria a almacenamiento
  176.             transformador.transform(origen,resultado);
  177.         } catch (Exception e) {
  178.             e.printStackTrace();
  179.         }
  180.     }
  181.  
  182.     @Override
  183.     public List<Contactos> lectura() {
  184.         List<Contactos> listaContactos = new ArrayList<>();
  185.         try {
  186.             // instancia de la fabrica de documentos
  187.             DocumentBuilderFactory fabricaDoc = DocumentBuilderFactory.newInstance();
  188.             // instancia del fabricante de documentos
  189.             DocumentBuilder fabricante = fabricaDoc.newDocumentBuilder();
  190.             // creacion del documento en memoria
  191.             Document documento = fabricante.parse(
  192.                     new File(RUTA_ARCHIVO+"/contactos_dom.xml")
  193.             );
  194.             // Obtener los nodos del documento segun un atributo de nombre
  195.             NodeList nodoListaContactos = documento.getElementsByTagName("contacto");
  196.             for (int i = 0; i < nodoListaContactos.getLength(); i++) {
  197.                 Node nodoContacto = nodoListaContactos.item(i);
  198.                 Contactos contacto = new Contactos();
  199.  
  200.                 // segundo nivel de profundidad del xml segun los atrbutos del
  201.                 // contacto
  202.                 NodeList nodoListaAtributos = nodoContacto.getChildNodes();
  203.                 for (int j = 0; j < nodoListaAtributos.getLength(); j++) {
  204.                     Node nodoAtributo =nodoListaAtributos.item(j);
  205.                     String nombreAtributo = nodoAtributo.getNodeName();
  206.                     String valorAtributo = nodoAtributo.getTextContent();
  207.                     switch (nombreAtributo){
  208.                         case "nombre":
  209.                             contacto.setNombre(valorAtributo);
  210.                             break;
  211.                         case "edad":
  212.                             contacto.setEdad(Integer.parseInt(valorAtributo));
  213.                             break;
  214.                         case "documento":
  215.                             contacto.setDocumento(Long.parseLong(valorAtributo));
  216.                             break;
  217.                     }
  218.                 }
  219.                 listaContactos.add(contacto);
  220.             }
  221.             return listaContactos;
  222.         } catch (Exception e) {
  223.             e.printStackTrace();
  224.         }
  225.         return new ArrayList<>();
  226.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement