18
Abr
11

XML con j de JDOM III

Después de toda la teoría (xml con j de JDOM, xml con j de JDOM II) que para qué pero es verdad, fue bastante. Aquí viene la ultima parte de la introducción a este mundo del XML en Java

para esto se necesitan las librerías:

o pueden descargar la que ya contiene ambas y ademas mi propia clase para trabajar documentos XML

aquí se describe el show

y aquí esta el código fuente de mi clase y la descripción

/**
 * This class is my interface to the world with DOM and XPath
 * @version 1.0, 14/03/2011
 * @author Ingenio DS
 */

package org.ingenio.ds.xml;

import java.io.IOException;
import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.StringReader;

import java.util.Date;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.DocType;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

import org.jdom.xpath.XPath;

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.XMLConstants;
import javax.xml.validation.Validator;
import javax.xml.transform.stream.StreamSource;

public class XMLUtil {
 private static String ls = System.getProperty("line.separator");
    private static String ts = "\t";

    private XMLUtil() {}

	/**
     * Write a text file with the content passed by param.
     * @param file the path to the file.
     * @param srt_xml the String that will be written.
     */
    public static void writeString(String file,String srt_xml)throws Exception{
	    FileWriter fw = new FileWriter(file);
	    BufferedWriter bw = new BufferedWriter(fw);
	    PrintWriter salida = new PrintWriter(bw);
	    salida.println(srt_xml);
	    salida.close();
    }

	/**
     * Write a text file with the content passed by param.
     * @param file the path to the file.
     * @param doc_xml the xml Docuemnt object that will be written.
     */
    public static void writeDocument(String file,Document doc_xml)throws Exception{
	    FileWriter fw = new FileWriter(file);
	    BufferedWriter bw = new BufferedWriter(fw);
	    PrintWriter salida = new PrintWriter(bw);
	    String srt_xml=convertXML(doc_xml);
	    salida.println(srt_xml);
	    salida.close();
	}

	/**
     * validate a xml file againts a dtd file.
     * @param doc_xml a org.jdom.Document.
     * @param dtd_dir the path to the file dtd file.
     * @param roor_element the root element in the xml file.
     * @return a String "true" in case of a valid xml or a error description in case.
     * @throws Exception
     */
    public static String validateXMLDTD(String xml_dir, String dtd_dir,String roor_element )throws Exception{
        Document doc_xml=readXML(xml_dir);
		return validateXMLDTD(doc_xml,dtd_dir,roor_element);
    }

	/**
     * validate a xml file againts a dtd file.
     * @param doc_xml a org.jdom.Document.
     * @param dtd_dir the path to the file dtd file.
     * @param roor_element the root element in the xml file.
     * @return a String "true" in case of a valid xml or a error description in case.
     * @throws IOException
     * @throws Exception
     */
    public static String validateXMLDTD(Document doc_xml, String dtd_dir,String roor_element )throws IOException,Exception{
        try {
            //*declaramos el doctype*/
            DocType docType = new DocType(roor_element,dtd_dir);
            /*seteamos el doctype a el documento*/
            doc_xml.setDocType(docType);

            //*SAXBuilder(true) = vamos a validar*/
            SAXBuilder builder=new SAXBuilder(true);
            //*reconstruimos el documento para verificar su validez*/
            doc_xml=builder.build(new StringReader(convertXML(doc_xml)));
            return "true";
        }catch(JDOMException e) {
            return e.toString();
        }
        catch(IOException e) {
            throw new IOException("Error al leer uno de los ficheros "+e.toString());
        }
        catch(Exception e) {
            throw new Exception("Error "+e.toString());
        }
    }

    /**
     * validate a xml file againts a xsd file.
     * @param xml_dir the path to the file xml file.
     * @param xsd_dir the path to the file xsd file.
     * @return a String "true" in case of a valid xml or a error description in case.
     * @throws Exception
     */
    public static String validateXMLXSD(String xml_dir, String xsd_dir)throws Exception{
        //*cargamos el documento de un archivo*/
        Document doc_xml=readXML(xml_dir);
	return validateXMLXSD(doc_xml,xsd_dir);
    }

	/**
     * validate a xml file againts a xsd file.
     * @param doc_xml an org.jdom.Document.
     * @param xsd_dir the path to the file xsd file.
     * @return a String "true" in case of a valid xml or a error description in case.
     * @throws Exception
     */
    public static String validateXMLXSD(Document doc_xml, String xsd_dir)throws Exception{
        try {
           //*Creamos nuestra fabrica de schemas y le decimos que seran noNamespaceSchemaLocation*/
           //*SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)*/
           SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
           //*creamos el Schema indicando con base en un lava.io.File */
	   Schema schema = schemaFactory.newSchema(new File(xsd_dir));
	   //*y de este schema obtenemos un validador*/
	   Validator validator = schema.newValidator();
	   //*creamos una copia temporal de nuestro xml*/
	   writeDocument("xml_tester_temp_.xml",doc_xml);
	   //*y validamos*/
	   validator.validate(new StreamSource(new File("xml_tester_temp_.xml")));
            return "true";
        }catch(JDOMException e) {
            return e.toString();
        }
        catch(IOException e) {
            throw new Exception("Error al leer uno de los ficheros "+e.toString());
        }

    }

    /**
     * read a XML a xml file.
     * @param file a java.io.File (the xml document file).
     * @return an org.jdom.Document.
     * @throws JDOMException
     * @throws IOException
     */
    public static Document readXML(File file)throws JDOMException,IOException{
        //*Cargamos el documento*/
        //*SAXBuilder(false) = no vamos a validar*/
        SAXBuilder builder=new SAXBuilder(false);
        //*cargamos el documento de un archivo*/
        Document doc_xml=builder.build(file);
        return doc_xml;
    }

	/**
     * read a xml file.
     * @param file a String (the path to the xml document file).
     * @return an org.jdom.Document.
     * @throws JDOMException
     * @throws IOException
     */
    public static Document readXML(String file)throws JDOMException,IOException{
        return readXML(new File(file));
	}

	/**
     * execute a XPath sentence in a xml document based in XPath.selectNodes().
     * @param document an org.jdom.Document.
     * @param criteria a String with the sentence to execute.
     * @return a java.util.List with all the elements matches with the sentence.
     * @throws JDOMException
     */
    public static List findElements(Document document,String criteria)throws JDOMException{
    	//*iniciamos el objeto XPath con el cual realizaremos la busqueda*/
    	XPath xp = XPath.newInstance(criteria);
    	//*Ejecutamos la busqueda*/
		List list = xp.selectNodes(document);
		return list;
    }

	/**
     * execute a XPath sentence in a xml document based in XPath.selectSingleNode().
     * @param document an org.jdom.Document.
     * @param criteria a String with the sentence to execute.
     * @return an org.jdom.Element with the element matches with the sentence.
     * @throws JDOMException
     */
    public static Element findElement(Document document,String criteria)throws JDOMException{
    	//*iniciamos el objeto XPath con el cual realizaremos la busqueda*/
    	XPath xp = XPath.newInstance(criteria);
    	//*Ejecutamos la busqueda*/
		Element element =(Element) xp.selectSingleNode(document);
		return element;
    }

	/**
     * conver an org.jdom.Document in a String representative.
     * @param document an org.jdom.Document.
     * @return a String with the converted document.
     * @throws Exception
     */
    public static String convertXML(Document doc_xml)throws Exception{
        //*Formato para pasar a cadena*/
        Format format = Format.getPrettyFormat();
        //*XMLOutputter el que lo convierte a cadena*/
        XMLOutputter xmloutputter = new XMLOutputter(format);
        //*al fin lo convertimos a cadena*/
        String stringXML = xmloutputter.outputString(doc_xml);
        //*retornamos la cadena*/
        return stringXML;
    }

	/**
     * conver a String in an org.jdom.Document.
     * @param str_xml a xml in string.
     * @return an org.jdom.Document with the parsed String.
     * @throws Exception
     */
    public static Document convertString(String str_xml)throws Exception {
	    try {
	      SAXBuilder builder = new SAXBuilder();
	      Document result = builder.build(new StringReader(str_xml));
	      return result;
	    } catch(JDOMException e) {
	      throw new Exception("Error al generar el documento XML "+e.toString());
	    } catch(NullPointerException e) {
	      throw new Exception("Error "+e.toString());
	    }
  }

	/**
     * an Ingenio DS info element.
     * @return an org.jdom.Element.
     */
    public static Element getInfoElement(){
        Element info = new Element("XMLTester");
	//agregamos un atributo a la etiqueta raiz
	info.setAttribute("createdby","Ingenio DS");
	info.addContent(new Element("url").addContent("https://ingeniods.wordpress.com"));
	info.addContent(new Element("date").addContent("30/03/2011"));
	info.addContent(new Element("description").addContent("This app its make to validate a XML document againts DTD or XSD files, and search with xpath sentences in a document"));
	info.addContent(new Element("email").addContent("ingenio.ds@hotmail.com"));
	return info;
    }
}

Lista de metodos
static org.jdom.Document convertString(java.lang.String str_xml)convierte un String a un org.jdom.Document.
static java.lang.String convertXML(org.jdom.Document doc_xml)conver an org.jdom.Document in a String representative.
static org.jdom.Element findElement(org.jdom.Document document,
java.lang.String criteria)ejecuta la sentencia recibida para buscar el primer elemento en el documento enviado por parametro.
static java.util.List findElements(org.jdom.Document document,
java.lang.String criteria)ejecuta la sentencia recibida para buscar los elementos en el documento enviado por parametro.
static org.jdom.Element getInfoElement()un elemento con información de Ingenio DS .
static org.jdom.Document readXML(java.io.File file)carga un documento xml representado por el java.io.File de disco a un Document.
static org.jdom.Document readXML(java.lang.String file)carga un documento xml en base al path recibido por parametro.
static java.lang.String validateXMLDTD(org.jdom.Document doc_xml,
java.lang.String dtd_dir,
java.lang.String roor_element)valida un Document contra el dtd que se encuentra en dtd_dir.
static java.lang.String validateXMLDTD(java.lang.String xml_dir,
java.lang.String dtd_dir,
java.lang.String roor_element)valida el xml que se encuentra en xml_dir contra el dtd que se encuentra en dtd_dir.
static java.lang.String validateXMLXSD(org.jdom.Document doc_xml,
java.lang.String xsd_dir)valida un Document contra el xsd que se encuentra en xsd_dir.
static java.lang.String validateXMLXSD(java.lang.String xml_dir,
java.lang.String xsd_dir)valida el xml que se encuentra en xml_dir contra el xsd que se encuentra en xsd_dir.
static void writeDocument(java.lang.String file,
org.jdom.Document doc_xml)escribe en el archivo file el Document representado por doc_xml.
static void writeString(java.lang.String file,
java.lang.String srt_xml)escribe en el archivo qe se encuentra en file la cadena que se encuentra en srt_xml.

0 Responses to “XML con j de JDOM III”



  1. Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 348 seguidores

Ingenio DS en Facebook

Redes Sociales y Archivos

Entradas

abril 2011
L M X J V S D
« Mar   May »
 123
45678910
11121314151617
18192021222324
252627282930  

IngenioDS en twiter


A %d blogueros les gusta esto: