COMO GENERAR XML EN EL LENGUAJE JAVA Y IDE NETBEANS #2

Estimados lectores buen día, gracias por pasarse por aquí, este es su espacio y siempre serán bienvenidos, recuerden que pueden dejar su opinión en cada publicación, también se avisa que toda información publicada aquí es de libre distribución.

En la entrada anterior en lo referente a Java, vimos como instalar la IDE NetBeans mostrando a cada detalle cada paso, continuando en ello en esta ocasión mostraremos como generar un “XML” escribiendo código Java desde la IDE que hemos instalado.

Para ello se ha diseñado y programado una forma la que simula ser un Login para dar acceso a usuarios en la cual pedirá el servidor, base de datos, usuario y contraseña tal como se ve en la imagen.

Selección_001

La información que va a almacenar el XML serán los datos de conexión, por ejemplo tomando en cuenta la imagen de arriba seria, localhost, comercial y julio.

El contenido del archivo XML final sera el siguiente:




localhost
comercial
Julio

Bien para ello tenemos que agregar al proyecto las librerias JDOM 2.0.6 el cual podrás descargar de la pagina oficial http://www.jdom.org/ o también del enlace de nuestra cuenta de Mediafire haciendo click aquí.

El próximo paso sera descomprimir y agregar todas las librerías de este paquete que son 5 archivos *.*jar al proyecto, para ello nos vamos al árbol del proyecto, damos click derecho en donde dice libraries y damos clic en add JAR/folder, tal como se muestra en la imagen, al principio batalle para posicionarme en la carpeta donde están las librerías por que hacia doble click en una carpeta y se agregaba toda la carpeta, después se soluciono.

Consejo emergente_002

Luego nos saldrá una ventana en la cual tendremos que buscar las librerías de Jdom que descargamos, una vez descargada podremos ver las librerías agregadas al proyecto así como se ven en la imagen de arriba.

Selección_003

Ya con esto podemos agregar los encabezados en la clase en donde se van a usar las librerías, aunque, no es muy necesario ya que al poner el código el mismo IDE nos marcara de que sera necesario importar las librerías en la clase, de una u otra forma les dejare el código por si desean copiar y pegar para ahorrarse tiempo.


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package interfaces;

import clases.classUsuarios;
import herramientas.conexion;
import java.awt.List;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.jar.Attributes;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

import javax.xml.*;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

El siguiente paso sera crear la función que genere nuestro preciado y hermoso XML y usarlo en el transcurso del programa como acceso de configuraciones locales por equipo, entonces les dejo el código para que lo puedan adaptar a sus necesidades

public void crearXML2() throws ParserConfigurationException, TransformerConfigurationException, TransformerException{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation implementation = builder.getDOMImplementation();

Document document = implementation.createDocument(null, "Configuracion", null);
document.setXmlVersion("1.0");

Element raiz = document.getDocumentElement();

Element nodoServidor = document.createElement("Servidor"); //creamos un nuevo elemento
Text nodoValorServidor = document.createTextNode(this.txtServer.getText()); //Ingresamos la info
nodoServidor.appendChild(nodoValorServidor);
raiz.appendChild(nodoServidor); //pegamos el elemento a la raiz "Documento"

Element nododb = document.createElement("DB"); //creamos un nuevo elemento
Text nodoValorDB = document.createTextNode(this.txtBase.getText()); //Ingresamos la info
nododb.appendChild(nodoValorDB);
raiz.appendChild(nododb); //pegamos el elemento a la raiz "Documento"

Element nodoUsuario = document.createElement("Usuario"); //creamos un nuevo elemento
Text nodoValorUsuario = document.createTextNode(this.txtUsuario.getText()); //Ingresamos la info
nodoUsuario.appendChild(nodoValorUsuario);
raiz.appendChild(nodoUsuario); //pegamos el elemento a la raiz "Documento"

Source source = new DOMSource(document);
StreamResult result = new StreamResult(new 

java.io.File("Conexion.xml"));//nombre del archivo
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(source, result);
}

Y listo, esta función la podrás ejecutar en cualquier parte de la clase en donde este declarada, yo la use al momento de darle click en accesar

 private void cmdAccesarActionPerformed(java.awt.event.ActionEvent evt) {
 try {
 // TODO add your handling code here:

// File archivoConexion = new File("Conexion.xml");
//
// if (archivoConexion.exists())
// System.out.println("El fichero");
// else
 crearXML2();

 conexion con = new conexion();
 con.strServidor=this.txtServer.getText();
 con.strPSWSQL="";
 con.strUsuarioSQL="root";
 con.strBaseDeDatos=this.txtBase.getText();

 con.conectado();
 leerConfiguracion();
 frmPrincipal principal= new frmPrincipal();
 classUsuarios usuarios = new classUsuarios();
 if (usuarios.blnChecaUsuarioContra("SELECT * FROM Usuarios where Usuario='"+this.txtUsuario.getText() +"' and Contra='"+this.pswContraseña.getText()+"'")==true){
 this.setVisible(false);
 principal.setVisible(true);
 }
 else
 JOptionPane.showMessageDialog(null, "USUARIO O CONTRASEÑA INCORRECTO"+this.pswContraseña.getText());
 System.out.println("SELECT * FROM Usuarios where Usuario='"+this.txtUsuario.getText() +"' and Contra='"+this.pswContraseña.getText()+"'");
 } catch (ParserConfigurationException ex) {
 Logger.getLogger(frmLogueo.class.getName()).log(Level.SEVERE, null, ex);
 } catch (TransformerException ex) {
 Logger.getLogger(frmLogueo.class.getName()).log(Level.SEVERE, null, ex);
 }

 }

Y eso seria así de fácil sin complicarse mucho.

Bien espero que les sea de utilidad, yo busque por muchos blogs y algunos de ellos me ayudaron y después se adapto el código para que funcionara de acuerdo a nuestras necesidades.

Saludos no olviden dejar su huella en la caja de comentarios y puntuar la publicación.

Anuncios

1.6. Glosario

solución de problemas: El proceso de formular un problema, hallar la solución y expresar esa solución.

lenguaje de alto nivel: Un lenguaje como Python diseñado para ser fácil de leer y escribir para la gente.

lenguaje de bajo nivel: Un lenguaje de programación diseñado para ser fácil de ejecutar para un computador; también se lo llama lenguaje de máquina “o lenguaje ensamblador”.

portabilidad: La cualidad de un programa que le permite ser ejecutado en más de un tipo de computador.

interpretar: Ejecutar un programa escrito en un lenguaje de alto nivel traduciéndolo línea por línea

compilar: Traducir un programa escrito en un lenguaje de alto nivel a un lenguaje de bajo nivel todo al mismo tiempo, en preparación para la ejecución
posterior.

código fuente: Un programa escrito en un lenguaje de alto nivel antes de ser compilado.

código de objeto: La salida del compilador una vez que ha traducido el programa.

programa ejecutable: Otro nombre para el código de objeto que está listo para ejecutarse.

guión: Un programa archivado (que va a ser interpretado).

programa: Un conjunto de instrucciones que especifica una computación.

algoritmo: Un proceso general para resolver una clase completa de problemas.

error (bug): Un error en un programa.

depuración: El proceso de hallazgo y eliminación de los tres tipos de errores de programación.

sintaxis: La estructura de un programa.

error sintáctico: Un error en un programa que hace que el programa sea imposible de analizar sintácticamente (e imposible de interpretar).

error en tiempo de ejecución: Un error que no ocurre hasta que el programa ha comenzado a ejecutarse e impide que el programa continúe.

excepción: Otro nombre para un error en tiempo de ejecución.

error semántico: Un error en un programa que hace que ejecute algo que no era lo deseado.

semántica: El significado de un programa.

lenguaje natural: Cualquier lenguaje hablado que evolucionó de forma natural.

lenguaje formal: Cualquier lenguaje diseñado por humanos que tiene un propósito específico, como la representación de ideas matemáticas o programas de computadores; todos los lenguajes de programación son lenguajes formales.

unidad: Uno de los elementos básicos de la estructura sintáctica de un programa, análogo a una palabra en un lenguaje natural.

análisis sintáctico: La examinación de un programa y el análisis de su estructura sintáctica.

sentencia print: Una instrucción que causa que el interprete Python muestre un valor en el monitor.

Cadenas

7.1. Un tipo de datos compuesto

Hasta el momento hemos visto tres tipos: int, float, y string. Las cadenas son cuantitativamente diferentes de los otros dos porque están hechas de piezas menores: caracteres.

Los tipos que comprenden piezas menores se llaman tipos de datos compuestos. Dependiendo de que estemos haciendo, podemos querer tratar un tipo compuesto como una única cosa o acceder a sus partes. Esta ambigüedad es útil.

El operador corchete selecciona un carácter suelto de una cadena.

   1: >>> fruta = "banana"

   2: >>> letra = fruta[1]

   3: >>> 

   4: print letra

La expresion fruta[1] selecciona el caracter numero 1 de fruta. La variable letra apunta al resultado. Cuando mostramos letra, nos encontramos con una sorpresa: a

La primera letra de “banana” no es a. A no ser que usted sea un programador.

Por perversas razones, los científicos de la computacion siempre empiezan a contar desde cero. La 0-sima letra (“cerosima”) de “banana” es b. La 1-esima (“unesima”) es a, y la 2-esima (\dosesima”) letra es n.

Si quiera la cerosima letra de una cadena, simplemente pone 0, o cualquier expresión de valor 0, entre los corchetes:

   1: >>> letra = fruta[0]

   2: >>> print letra

   3: b

A la expresion entre corchetes se le llama índice. Un índice identifica a un miembro de un conjunto ordenado, en este caso el conjunto de caracteres de la cadena. El ³ndice indica cual quiere usted, de ahí el nombre. Puede ser cualquier expresión entera.

7.5. Comparación de cadenas

Los operadores de comparación trabajan sobre cadenas. Para ver si dos cadenas son iguales:

   1: if palabra == "banana":

   2: print "S³, no tenemos bananas!"

Otras operaciones de comparacion son utiles para poner palabras en orden alfabético:

   1: if palabra < "banana":

   2:     print "Tu palabra," + palabra + ", va antes de banana."

   3: elif palabra > "banana":

   4:     print "Tu palabra," + palabra + ", va despues de banana."

   5: else:

   6:     print "Sí, no tenemos bananas!"

Sin embargo, deber³a usted ser consciente de que Python no maneja las mayúsculas y minusculas como lo hace la gente. Todas las mayusuculas van antes de la minúsculas. Como resultado de ello:

Tu palabra, Zapato, va antes de banana.

Una forma comun de abordar este problema es convertir las cadenas a un formato estandar, como pueden ser las minusculas, antes de realizar la comparacion.

Un problema mayor es hacer que el programa se de cuenta de que los zapatos no son frutas.

8.2. Acceso a los elementos

La sintaxis para acceder a los elementos de una lista es la misma que para acceder a los caracteres de una cadena: el operador corchetes []. La expresión dentro de los corchetes especifica el índice. Recuerde que los índices siempre comienzan en cero:

   1: print numeros[0]

   2: numeros[1] = 5

El operador [] puede aparecer en cualquier parte de una expresion. Cuando aparece a la izquierda de una asignacion, cambia uno de los elementos de la lista, de manera que el “unesimo” elemento de numeros, que era 123, ahora es 5.

Se puede usar como índice cualquier expresion entera.

   1: >>> numeros[3-2]

   2: 5

   3: >>> numeros[1.0]

   4: TypeError: 

   5: sequence index must be integer

Si intenta acceder (leer o modificar) un elemento que no existe, obtendra un error en tiempo de ejecución:

   1: >>> numeros[2] = 5

   2: IndexError: list assignment index out of 

   3: range

Si se da un índice negativo, se cuenta hacia atras desde el final de la lista.

   1: >>> numeros[-1]

   2: 5

   3: >>> numeros[-2]

   4: 17

   5: >>> 

   6: numeros[-3]

   7: IndexError: list index out of range

   8: numeros[-1] es el ultimo 

   9: elemento de la lista, numeros[-2] es el penultimo, y

  10: numeros[-3] no 

  11: existe.

Es muy habitual usar una varible de bucle como índice para una lista:

   1: jinetes = ["guerra", "hambre", "peste", "muerte"]

   2: i = 0

   3: while i < 4:

   4: print jinetes[i]

   5: i = i + 1

Este bucle while cuenta desde 0 hasta 4. Cuando la variable de bucle vale 4, la condición falla y acaba el bucle. Por tanto, el cuerpo del bucle solo se ejecuta cuando i es 0, 1, 2 y 3.

Cada vez que recorremos el bucle, la variable i se usa como índice de la lista, imprimiendo el elemento i-esimo. Esta plantilla de computacion se llama recorrido de lista.

8.3. Longitud (tamaño) de una lista

La función len toma una lista y devuelve su tamaño. Es una buena idea usar este valor como límite superior de un bucle, en lugar de una constante. De esta manera, si el tamaño de la lista cambia, no habrá que estar haciendo cambios en todos los bucles; funcionaran correctamente con cualquier tamaño de lista.

   1: jinetes = ["guerra", "hambre", "peste", "muerte"]

   2: i = 0

   3: while i < 

   4: len(jinetes):

   5: print jinetes[i]

   6: i = i + 1

La ultima vez que se ejecuta el cuerpo del bucle, i es len(jinetes) – 1, que es el índice del ultimo elemento. Cuando i se iguala a len(jinetes), la condición falla y no se ejecuta el cuerpo, lo que es una cosa buena, ya que len(jinetes)
no es un índice legal.

Aunque una lista puede contener otra lista como elemento, la lista anidada cuenta como un elemento sencillo. El tamaño de esta lista es 4:

   1: ['spam!', 1, ['Brie', 'Roquefort', 'Pol le Veq'], [1, 2, 3]]

Como ejercicio, escriba un bucle que recorra la lista anterior e imprima la longitud de cada elemento. }¿que ocurre si envía un entero a len?

8.4. Pertenencia a una lista

in es un operador booleano que comprueba la pertenencia a una secuencia. Lo usamos en la Sección 7.10 con las cadenas, pero también funciona con las listas y otras secuencias:

   1: >>> jinetes = ['guerra', 'hambre', 'peste', 'muerte']

   2: >>> 

   3: 'peste' in jinetes

   4: 1

   5: >>> 'libertinaje' in jinetes

   6: 0

Como “peste” es un miembro de la lista jinetes, el operador in devuelve verdadero. Como “libertinaje” no esta en la lista, in devuelve falso.

Podemos usar not en combinacion con in para comprobar si un elemento no es miembro de una lista:

   1: >>> 'libertinaje' not in jinetes

   2: 1