[Clase BETA] Lectura por tags archivos xml

Iniciado por Debci, 10 Agosto 2009, 17:08 PM

0 Miembros y 2 Visitantes están viendo este tema.

Debci



Bueno amigos aqui os dejo una clase que acabo de programar, le faltan cosas, como por ejemplo escritura en tags (aun no me han respondido al mensaje, si lo supiese ya habria implementado ene sta clase) bueno, la clase permite obtener contenido de tags, setear la ruta del archivo, obtener el arbol...

Para los que quieran simplificar mucho la lectura de archivos por tags. Ayudará a salir del paso, en cosas como leer configuraciones, dicionarios...

Código (java) [Seleccionar]

package cliente;
//Para elhacker.net programado por Debci
import java.io.File;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;

public class LecturaXML {
public static String url;
public static String nombre;
public static String identificador;
public static String raiz;
public static void main(String argv[]) {
LecturaXML XML = new LecturaXML();
XML.setArchivo("$HOME/Escritorio/archivo.xml");
XML.getRaiz();
     

  try {
  DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  Document doc = dBuilder.parse(new File(url));
  doc.getDocumentElement().normalize();
          String raiz = doc.getDocumentElement().getNodeName();
  System.out.println("El elemento raíz es: " + raiz);
  NodeList listaPersonas = doc.getElementsByTagName("persona");

  for (int i = 0; i < listaPersonas.getLength(); i ++) {

    Node persona = listaPersonas.item(i);

    if (persona.getNodeType() == Node.ELEMENT_NODE) {

            Element elemento = (Element) persona;

            System.out.println(nombre + getTagValue(identificador, elemento));
            System.out.println("Apellido : " + getTagValue("apellido", elemento));
            System.out.println("Edad : " + getTagValue("edad", elemento));

    }
            Element elemento = (Element) persona;
            String nombre = getTagValue("nombre", elemento);
            System.out.println(nombre);
    }
  } catch (Exception e) {
    e.printStackTrace();
  }

}

private static String getTagValue(String sTag, Element eElement)
{
  NodeList nlList= eElement.getElementsByTagName(sTag).item(0).getChildNodes();
  Node nValue = (Node) nlList.item(0);

  return nValue.getNodeValue();

}
public void setArchivo(String url) {
     this.url = url;
}

public void getTag(String nombre, String identificador) {
     this.nombre = nombre;
     this.identificador = identificador;
}
public String getRaiz(){
     return raiz;
}

}

Peroooo... tanto codigo para que?  :huh: diran los nuevos en el mundo de java, por eso existen los API ´ s, para explicar como fucniona un codigo  :rolleyes:
Una pequeña, muy reducida api:

La clase base es LecturaXML, ya creada como objeto XML, por tanto para usar alguno de sus emtodos usamos XML.metodo (Usaremos XML para explicar el API), hasta aqui bien.



Metodo setArchivo
Código (java) [Seleccionar]

XML.setArchivo("ruta de nuestro archivo XML");

Con este método indicamos y guardamos en un variable (Objeto) la ruta del archivo a leer.




Metodo getTag
Código (java) [Seleccionar]

XML.getTag("Texto previo: " + "id del tag al que queremos leer el contenido");

Esto nos sirve para sacar datos de las tags del archivo (que hayamos seteado con setArchivo) y darle directamente un texto previo explicativo.

Nos devolverá el contenido del tag (suponiendo que sea 1) nos daria un out asi:
Texto previo: 1



Método getRaiz
Código (java) [Seleccionar]

XML.getRaiz();

Nos devolverá el tag raiz del archivo (que hayamos seteado con setArchivo), no tiene argumentos.

tmabien hay getTagValue, mas avanzado pero lo vi complicado para los que empiezan, por eso lo simplifiqué sin eliminarlo por si acaso.

Ejemplo práctico:


Que es el XML? es un lenguaje por tags normalmente suado para archivos de configuración y pequeñas o grandes  :-X bases de datos, asi como sitios webs, todos los elementos van separados por tags, es decir empieza tga1 hola acaba tag1 y el contenido de este es hola. Para entenderlo mejor:

Si no sabeis lo que son tits, buscad en el dicionario-traductor inglés....

Una vez sabemos lo que es el XML, o por lo menos tenemos una ligera idea, vamos a crear el archivo XML para nuestro ejemplo, que tendrá por nombre hacking.xml.

Archivo XML:
Código (xml) [Seleccionar]

//Archivo: hacking.xml
<hacking>
<phishing>Un metodo de hacking</phishing>
<ingenieriainversa>Debug, cracking...</ingenieriainversa>
<defacing>Hack de sitios webs a partir de vulnerabilidades</defacing>
</hacking>

Es necesario adaptar el codigo dependiendo del tag raiz del archivo (no es muy dificil, en proximas updates del paquete y clase, se podra hacer con un metodo.)
Código (java) [Seleccionar]

package main;


import pakete.cliente; //la clase anteriormente explicada

public static void main(String argv[]){

LecturaXML XML = new LecturaXML();
XML.setArchivo("/home/debci/hacking.xml");
XML.getRaiz();
XML.getTag("Descripción: " , "defacing");//Hemos buscado el contenido del tag defacing, por lo tanto nos devuelve su descripción y para amenizar le ponemos un Texto precursor Descripción


}

Obtendriamos esto:
Citar
El elemento raíz es: hacking
Descripción: Hack de sitios webs a partir de vulnerabilidades

Saludos

PD: No sean severos apenas tengo 15 añitos, y haber si pueden responder como escrbir en tags de un xml, que ando buscando y harto ya de no encontrar.  :-(

Espero que les guste  ::)
Y les funcione jeje ;D

Debci

Ni un agradecimiento :-X con lo que me lo he currado...

saludos

egyware

Hola no he probado tu funcion ni nada, supongo que debe funcionar pero java es orientado a objetos asi que te recomiendo que hagas algo como esto
XML xml = XML.leerArchivo("c:\\documents and settings\\egyware\\documents\\un xml.xml");
ó
XML xml = new XML("c:\\documents and settings\\egyware\\documents\\un xml.xml");
y haces lo que quiera con ese objeto porque ya que es facil corromper esa aplicación.
Esta muy bueno el post muy grande y explicativo.
Saludos sigue asi!!!

1mpuls0

Mas que el código me llamo la atención la chica  :rolleyes:

Solo bromeo, muy bien felicidades, la verdad es que muy pocos muestran sus programas y también muy pocos dan las gracias.
Pero vas bien, te felicito.

Vamos a ver que utilidad le damos a esta clase  :xD

Saludos
abc

Debci

Cita de: Darhius en 25 Agosto 2009, 06:29 AM
Mas que el código me llamo la atención la chica  :rolleyes:

Solo bromeo, muy bien felicidades, la verdad es que muy pocos muestran sus programas y también muy pocos dan las gracias.
Pero vas bien, te felicito.

Vamos a ver que utilidad le damos a esta clase  :xD

Saludos
ESta clase principalmente la hice porque a mi me dió bastantes problemas con la lectura de xml , ahora por ejemplo  podreis leer configuraciones guardadas en un xml, o cosas asi.

Saludos

gonza0605

estuve viendo el codigo que pusiste. tengo un par de dudas al respecto:

1. el archivo xml tiene que ser de este estilo por ejemplo:

<rm>
<persona>
<nombre> </nombre>
<edad> </edad>
</persona>
<persona>
<nombre> </nombre>
<edad> </edad>
</persona>
<persona>
<nombre> </nombre>
<edad> </edad>
</persona>
...
</rm>

o puede ser un xml mas extenso, porque no estoy manejando xml de ese estilo por ser demasiados sencillos, en delphi puedo trabajarlo tranquilamente al xml pero tengo que migrar el programa a java para pc con linux. y navegando en la red me encontre con este codigo y tenia esa duda.

2. la otra duda que tengo es porque utilizas  public void getTag(String nombre, String identificador) en vez de que devuelva un string con el contenido del tag. he modificado el codigo y no muestra el contenido del tag.

espero que puedas leer el mensaje, aunq sea un tema publicado medio viejo, pero la verdad que vengo leyendo java y haciendo cosas por mi cuenta aca en el trabajo y ando complicado con la lectura de tags de un xml en particular.

desde ya muchas gracias

saludos!!