Friday, April 12, 2013

MANEJO API: JSOUP


Buen día en esta oportunidad mostraré el manejo de una API que resultó ser muy buena ya que no hace mucho tiempo me recomendaron, su nombre es: JSOUP (http://jsoup.org/download), es una API para el parsing de datos HTML, XML cuanto estos se encuentran embebidos en un dato Spring.

En realidad es muy fácil vas con descargar el API: jsoup-1.7.2.jar y ubicarla dentro del LIB de tu APP, posteriormente a este paso ya se puede acceder a los beneficios de dicha API. (Por restriccón del BLOG se cambiará los símbolos MAYOR y MENOR por CORCHETES
).

Por EJEMPLO:
Si tenemos un STRING:

String cadenaHTML_02 = " [STRONG] " +
"   [FONT id='nombres' COLOR='WHITE' SIZE='3']CESAR RICARDO[/FONT] " +
" [/STRONG]: " +
" [STRONG] " +
"   [FONT id='apellidos' COLOR='WHITE' SIZE='3']GUERRA ARNAIZ[/FONT]" +
" [/STRONG]";


Y queremos obtener los datos del contenido de XML bastaría con hacer un método que internamente jale ya sea por ID o por el nombre del TAG, de la siguiente manera:

/*
* test_02
* @param cadenaHTML    
*/

public void test_02( String cadenaHTML ){
                       
Document objDocumento  = Jsoup.parse( cadenaHTML );
Element  objElemento_01 = objDocumento.select(  "FONT" ).first();
Element  objElemento_02 = objDocumento.getElementById ( "apellidos" );


String vTextoAtributo_ObjHTML_01 = objElemento_01.text
String vTextoAtributo_ObjHTML_02 = objElemento_02.text();         
                            
System.out.println( "" );
System.out.println( "- HTML FILTRADO #1: [" + objElemento_01  + "]" );
System.out.println( "- HTML FILTRADO #2: [" + objElemento_02  + "]" );
System.out.println( "" );
System.out.println( "- TEXTO 'HTML' #1: [" + vTextoAtributo_ObjHTML_01 + "]" );
System.out.println( "- TEXTO 'HTML' #2: [" + vTextoAtributo_ObjHTML_02 + "]" );

}


El resultado sería el siguiente:

- HTML FILTRADO #1: [[font id="nombres" color="WHITE" size="3"]CESAR RICARDO[/font]]
- HTML FILTRADO #2: [[font id="apellidos" color="WHITE" size="3"]GUERRA ARNAIZ[/font]]
- TEXTO 'HTML' #1: [CESAR RICARDO]
- TEXTO 'HTML' #2: [GUERRA ARNAIZ]


Otro ejemplo muy usado es cuando se almacena en una cadena una lista de objetos. En este caso si es requerido realizar el parsing, para ello también nos podríamos apoyar de esta API de la siguiente manera:
          

String cadenaHTML_04 =
"[productos]" +        
"  [producto]" +
"    [nombre]AAA0001[/nombre]" +
"    [descripcion]PAQUETE #1[/descripcion]" +
"    [codigo]AAA[/codigo]" +
"    [precio]11[/precio]" +
"    [megas]200[/megas]" +
"    [vigencia]1[/vigencia]" +
"  [/producto]" +
"  [producto]" +
"    [nombre]BBB0002[/nombre]" +
"    [descripcion]PAQUETE #2[/descripcion]" +
"    [codigo]BBB[/codigo]" +
"    [precio]22[/precio]" +
"    [megas]300[/megas]" +
"    [vigencia]24[/vigencia]" +
"  [/producto]" +
"[productos]";


De la misma forma que la anterior hacemos un método que obtendrá los datos pero esta vez nos apoyaremos en un bean para almacenar la data.   

/**
 * @author cguerra
 * ProductosBean
 */

 public class ProductosBean{
                private String nombre;
                private String descripcion;
                private String codigo;
                private String precio;
                private String megas;
                private String vigencia; 

                //Constructores ...
                public ProductosBean(){
                }                            

                public ProductosBean( String nombre, String descripcion,
                                                             String codigo, String precio,
                                                             String megas,  String vigencia ){

                               super();
                               this.nombre      = nombre;
                               this.descripcion = descripcion;
                               this.codigo      = codigo;
                               this.precio      = precio;
                               this.megas       = megas;
                               this.vigencia    = vigencia;
                }
             
                @Override
                public String toString() {

              return "ProductosBean [nombre=" + nombre
                         + ", descripcion=" + descripcion
                        + ", codigo="            + codigo
                        + ", precio="      + precio
                        + ", megas="       + megas
                      + ", vigencia="    + vigencia  + "]";
                }
..
…..
…….



Ahora crearemos el método respectivo:

  /*

    * test_04
    * @param cadenaHTML
    */
     public void test_04( String cadenaXML ){                            

      Document objDocumento = Jsoup.parse( cadenaXML );                            

     List[ProductosBean] listaProductosBean = new ArrayList[ProductosBean]();
     ProductosBean       objProductosBean   = null;                            

     Elements objElement_01 = objDocumento.select( "nombre"      );
     Elements objElement_02 = objDocumento.select( "descripcion" );
     Elements objElement_03 = objDocumento.select( "codigo"      );
     Elements objElement_04 = objDocumento.select( "precio"      );
     Elements objElement_05 = objDocumento.select( "megas"       );
     Elements objElement_06 = objDocumento.select( "vigencia"    );
                            

      List[String] listaDatos_01 = new ArrayList[String]();
      List[String] listaDatos_02 = new ArrayList[String]();
      List[String] listaDatos_03 = new ArrayList[String]();
      List[String] listaDatos_04 = new ArrayList[String]();
      List[String] listaDatos_05 = new ArrayList[String]();
     List[String] listaDatos_06 = new ArrayList[String]();                           

          for( int i=0; i[objElement_01.size(); i++ ){
                Element objElemento_01 = objElement_01.get( i );
                String  codigoPaquete  = objElemento_01.text();

                 listaDatos_01.add( codigoPaquete );

               }                          

       for( int j=0; j[objElement_02.size(); j++ ){
                                                Element objElemento_02     = objElement_02.get( j );
                                                String  descripcionPaquete = objElemento_02.text();
                                              
                                                listaDatos_02.add( descripcionPaquete );
                               }                                                         

      for( int x=0; x[objElement_03.size(); x++ ){
            Element objElemento_03 = objElement_03.get( x );
            String  codigoSMS      = objElemento_03.text();

            listaDatos_03.add( codigoSMS );
     }
                                          
       for( int y=0; y[objElement_04.size(); y++ ){
              Element objElemento_04 = objElement_04.get( y );
              String  precio         = objElemento_04.text();                                              

              listaDatos_04.add( precio );
      }               

       for( int z=0; z[objElement_05.size(); z++ ){
                Element objElemento_05 = objElement_05.get( z );
               String  mbInc          = objElemento_05.text();                                              

              listaDatos_05.add( mbInc );

      }
                             
     for( int w=0; w[objElement_06.size(); w++ ){
              Element objElemento_06 = objElement_06.get( w );
               String  vigencia       = objElemento_06.text();                                              

                listaDatos_06.add( vigencia );
       }            
                            
         //LISTA #1:
         for( int i=0; i[listaDatos_01.size(); i++ ){                                     

               objProductosBean = new ProductosBean();
                                              
               String nombre = listaDatos_01.get( i );
                objProductosBean.setNombre( nombre );
                                              
                //LISTA #2:
               for( int j=i; j[listaDatos_02.size(); j++ ){
                    String descripcion = listaDatos_02.get( j );                                                              

                     if( i == j ){      
                          objProductosBean.setDescripcion( descripcion ); 
                     }
                     else{
                             break;                  
                     }

  //LISTA #3:
   for( int x=i; x[listaDatos_03.size(); x++ ){
           String codigo = listaDatos_03.get( x );                                                                              
if( j == x ){    
     objProductosBean.setCodigo( codigo );
  }
        else{
                break;

  }
                                                                            
   //LISTA #4:
         for( int y=i; y[listaDatos_04.size(); y++ ){
               String precio = listaDatos_04.get( y );
                                                                                             
              if( x == y ){  
                   objProductosBean.setPrecio( precio );
             }
            else{
                   break;
           }
                                                                                             
          //LISTA #5:
         for( int z=i; z[listaDatos_05.size(); z++ ){
              String megas = listaDatos_05.get( z );                                                                                                             

      if( y == z ){
          objProductosBean.setMegas( megas );
   }
  else{
          break;
 }

//LISTA #6:
 for( int w=i; w[listaDatos_06.size(); w++ ){

     String vigencia = listaDatos_06.get( w);                                                                                                                            

 if( z == w ){ 
     objProductosBean.setVigencia( vigencia );                                                        

 }
  else{
           break;
             }
            }
           }
         }
         }  
       }

        listaProductosBean.add( objProductosBean );
  }

 System.out.println( listaDatos_01 );
 System.out.println( listaDatos_02 );
 System.out.println( listaDatos_03 );
 System.out.println( listaDatos_04 );
 System.out.println( listaDatos_05 );
  System.out.println( listaDatos_06 );
                            
 System.out.println( "RESULTADO: " + listaProductosBean );                       
}


El resultado sería el siguiente:
[AAA0001, BBB0002]
[PAQUETE #1, PAQUETE #2]
[AAA, BBB]
[11, 22]
[200, 300]
[1, 24]


RESULTADO: [ProductosBean [nombre=AAA0001, descripcion=PAQUETE #1, codigo=AAA, precio=11, megas=200, vigencia=1], ProductosBean [nombre=BBB0002, descripcion=PAQUETE #2, codigo=BBB, precio=22, megas=300, vigencia=24]]
 

Para descargar el ejemplo completo dar click: AQUÍ



No comments: