<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux, Java y programación &#187; Parsear</title>
	<atom:link href="http://casidiablo.net/tag/parsear/feed/" rel="self" type="application/rss+xml" />
	<link>http://casidiablo.net</link>
	<description>Blog de Java, Programación y Linux</description>
	<lastBuildDate>Fri, 11 Nov 2011 05:41:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Procesando XML en Java [Xerces]</title>
		<link>http://casidiablo.net/procesamiento-xml-java-xerces/</link>
		<comments>http://casidiablo.net/procesamiento-xml-java-xerces/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 17:29:34 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[programas]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[Parsear]]></category>
		<category><![CDATA[xerces]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1329</guid>
		<description><![CDATA[En este artículo utilizaré un pequeño ejemplo para explicar cómo manipular documentos XML usando XERCES Java Parser. En este primer ejemplo usaré el API DOM, y la utilizaremos para generar un archivo XML y guardarlo en disco, y posteriormente procesaremos (parsearemos) dicho archivo para leer su información. Nota: Sino tienes claro qué es un parser [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fprocesamiento-xml-java-xerces%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Procesando%20XML%20en%20Java%20%5BXerces%5D%22%20%7D);"></div>
<p style="text-align: center;"><img class="size-full wp-image-1344 aligncenter" title="java-duke-xml" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/08/java-duke-xml.png" alt="duke java xml" /></p>
<p>En este artículo utilizaré un pequeño ejemplo para explicar cómo manipular documentos XML usando <a href="http://xerces.apache.org/xerces-j/">XERCES Java Parser</a>. En este primer ejemplo usaré el API DOM, y la utilizaremos para generar un archivo XML y guardarlo en disco, y posteriormente procesaremos (<em>parsearemos</em>) dicho archivo para leer su información.</p>
<p><strong>Nota</strong>: Sino tienes claro qué es un parser XML, qué es un API XML para Java y cuáles están disponibles, o aún tienes algunas dudas en relación con Java y XML, puedes/debes leer <a href="http://casidiablo.net/xml-java/">este pequeño artículo</a>.</p>
<h3>Generación de archivos XML usando Xerces</h3>
<p>En esta ocasión utilizaremos el API DOM para generar un archivo XML, que guardará información acerca de un listado de descargas ficticio. Como resultado, nuestra aplicación generará el siguiente documento XML:</p>
<pre class="brush: xml; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;Descargas&gt;
    &lt;descarga id=&quot;1&quot;&gt;
        &lt;titulo&gt;Libros Java&lt;/titulo&gt;
        &lt;ruta&gt;http://casidiablo.net/libros.zip&lt;/ruta&gt;
        &lt;hits&gt;2546&lt;/hits&gt;
    &lt;/descarga&gt;
    &lt;descarga id=&quot;2&quot;&gt;
        &lt;titulo&gt;Libros C Sharp&lt;/titulo&gt;
        &lt;ruta&gt;http://casidiablo.net/libroscs.zip&lt;/ruta&gt;
        &lt;hits&gt;1654&lt;/hits&gt;
    &lt;/descarga&gt;
&lt;/Descargas&gt;</pre>
<p>En el cual tenemos un elemento llamado <em><strong>descarga</strong></em> que contiene un atributo llamado <em><strong>id</strong></em>; además posee tres nodos hijos: <em><strong>titulo</strong></em>, <em><strong>ruta</strong></em> y <em><strong>hits</strong></em>. Teniendo en cuenta esto crearemos un pequeño bean (clase <em>Descargas.java</em>), que contiene dichos datos:</p>
<pre class="brush: java; title: ; notranslate">public class Descargas {
    //Variables
    private int id;
    private String titulo;
    private String ruta;
    private int hits;
    //Constructor de la clase
    public Descargas(int id, String titulo, String ruta, int hits){
        this.id = id;
        this.titulo = titulo;
        this.ruta = ruta;
        this.hits = hits;
    }
    //Metodos Setters y Getters
    public void setID(int id) {
        this.id = id;
    }
    public int getID() {
        return this.id;
    }
    //etc... (AL FINAL DEL ARTÍCULO PUEDES DESCARGAR EL EJEMPLO COMPLETO)
}</pre>
<p>Más adelante utilizaremos la clase <em>GenerarXML.java</em>, quien se encargará de crear el archivo XML. De momento detallaremos los pasos básicos para realizar tareas de ese tipo:</p>
<ul>
<li>Crear los objetos a cargar en el documento XML (en nuestro ejemplo, objetos tipo <strong><em>Descargas</em></strong>)</li>
<li>Crear un objeto <em><a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a></em> que contendrá el documento XML</li>
<li>Generar los datos XML para los objetos creados en primer paso</li>
<li>Crear un archivo (o salida) XML</li>
</ul>
<p>En nuestro ejemplo, la invocación a los métodos que realizan estas tareas se encuentra en el método <em>main</em>:</p>
<pre class="brush: java; title: ; notranslate">public static void main(String args[])
{
   GenerarXML generador = new GenerarXML();
   // A. Crear el objeto(s) a Descargas
   Descargas descarga = new Descargas(1, &quot;Libros Java&quot;, &quot;http://casidiablo.net/libros.zip&quot;, 2546);
   Descargas descarga2 = new Descargas(2, &quot;Libros C Sharp&quot;, &quot;http://casidiablo.net/libroscs.zip&quot;, 1654);
   // B. Generar un documento XML usando Document
   generador.generaDocumentoXML();
   // C. Generar XML para el/los objeto(s)
   generador.generarDocumentoXMLDescarga(descarga);
   generador.generarDocumentoXMLDescarga(descarga2);
   // D. Obtener el código XML
   String textoXML = generador.obtenerTextoXML();
   generador.guardarDocumentoXML(textoXML);
   System.out.println(textoXML);
}</pre>
<p>Veamos con más profundidad cómo funciona el segundo paso (<strong><em>Crear un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a> que contendrá el documento XML</em></strong>):</p>
<pre class="brush: java; title: ; notranslate">public void generaDocumentoXML() {
    try {
        // 1. Crear objeto DocumentBuilderFactory
        DocumentBuilderFactory dbFactory = DocumentBuilderFactoryImpl.newInstance();
        // 2. A partir del objeto DocumentBuilderFactory crear un objeto DocumentBuilder
        DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
        // 3. Generar el documento XML
        documentoXML = docBuilder.newDocument();
    } catch (Exception e) {
        System.out.println(&quot;Error : &quot; + e);
    }
    // 4. Crear el elemento &quot;descargas&quot;
    descarga = documentoXML.createElement(TAG_DESCARGAS);
    // 5. Agregar al documento principal
    documentoXML.appendChild(descarga);
}</pre>
<ol>
<li>Creamos un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilderFactory.html">DocumentBuilderFactory</a>, utilizando la el método <em>newInstance()</em> de la clase <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xerces/jaxp/DocumentBuilderFactoryImpl.html">DocumentBuilderFactoryImpl</a>.</li>
<li>Creamos un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilder.html">DocumentBuilder</a>, con el que crearemos el objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a></li>
<li>Generamos el documento usando el método <em>newDocument()</em> de <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilder.html">DocumentBuilder</a></li>
<li>Se crea el elemento raíz del documento XML y,</li>
<li>Se añade dicho elemento al objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a></li>
</ol>
<p>Después de esto, ya tenemos listo nuestro objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a> en donde crearemos el documento XML. El paso siguiente será alimentar el documento XML con la información de nuestros objetos, lo cual se hace en el método <em>generarDocumentoXMLDescarga</em>:</p>
<pre class="brush: java; title: ; notranslate">public void generarDocumentoXMLDescarga(Descargas descargas)
{
    Element elemento;
    Element item;
    // 1. Crear elemento
    elemento = documentoXML.createElement(TAG_DESCARGA);
    // 2. Asignar un atributo
    elemento.setAttribute(TAG_ID, &quot;&quot;+descargas.getID());
    // 3. Aniadir elemento al documento
    descarga.appendChild(elemento);
    // a. Crear item
    item = documentoXML.createElement(TAG_TITULO);
    // b. Asignar un dato al item
    item.appendChild(documentoXML.createTextNode(descargas.getTitulo()));
    // c. Aniadir el item
    elemento.appendChild(item);
    // todos los items se crean sigiuendo el patron a, b, c
    // el código fuente completo se encuentra
    //disponible para su descarga al final de este artículo
}</pre>
<ol>
<li>Se crea un elemento (<em>&lt;descarga&gt;</em>)</li>
<li>Se asigna un atributo al elemento (<em>&lt;descarga id=&#8221;xxx&#8221;&gt;</em>)</li>
<li>Se añade el elemento al documento XML; posteriormente tenemos la creación de items, para dicho elemento:<br />
a. Se crea el item (<em>&lt;titulo&gt;&lt;/titulo&gt;</em>)<br />
b. Se asigna un dato al item <em>(&lt;titulo&gt;datos, muchos datos&lt;/titulo&gt;)</em><br />
c. Se añade el item al elemento <em>(&lt;descarga id=&#8221;xxx&#8221;&gt;&lt;titulo&gt;datos, muchos datos&lt;/titulo&gt;&lt;/descarga&gt;)</em></li>
</ol>
<p>Para generar una salida del documento XML se utilizamos el método <em>generaTextoXML()</em> el cual devuelve un string que contiene el documento XML:</p>
<pre class="brush: java; title: ; notranslate">private String generaTextoXML() {
   StringWriter strWriter = null;
   XMLSerializer seliarizadorXML = null;
   OutputFormat formatoSalida = null;
   try {
      seliarizadorXML = new XMLSerializer();
      strWriter = new StringWriter();
      formatoSalida = new OutputFormat();
      // 1. Establecer el formato
      formatoSalida.setEncoding(XML_ENCODING);
      formatoSalida.setVersion(XML_VERSION);
      formatoSalida.setIndenting(true);
      formatoSalida.setIndent(4);
      // 2. Definir un objeto donde se generara el codigo
      seliarizadorXML.setOutputCharStream(strWriter);
      // 3. Aplicar el formato
      seliarizadorXML.setOutputFormat(formatoSalida);
      // 4. Serializar documento XML
      seliarizadorXML.serialize(documentoXML);
      strWriter.close();
   } catch (IOException ioEx) {
      System.out.println(&quot;Error : &quot; + ioEx);
   }
   return strWriter.toString();
}</pre>
<ol>
<li>Utilizando un objeto de la clase <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/OutputFormat.html">OutputFormat</a>, se asigna el tipo de codificación y versión del archivo XML, activamos la identación y la ponemos a 4 espacios</li>
<li>Un objeto <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/XMLSerializer.html">XMLSerializer</a> escribe los datos del documento XML sobre un objeto de flujo de salida, en este caso un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/io/StringWriter.html">StringWriter</a>.</li>
<li>Asignamos el tipo de formato que el objeto <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/XMLSerializer.html">XMLSerializer</a> generará</li>
<li>Generamos el documento XML</li>
</ol>
<p>El string generado por <em>generaTextoXML()</em> podemos imprimirlo directamente en pantalla, o escribirlo en un archivo como lo hace el método <em>guardarDocumentoXML()</em>:</p>
<pre class="brush: java; title: ; notranslate">public void guardarDocumentoXML(String texto) {
   try {
      OutputStream fout = new FileOutputStream(NOMBRE_ARCHIVO_XML);
      OutputStream bout = new BufferedOutputStream(fout);
      OutputStreamWriter out = new OutputStreamWriter(bout, JAVA_ENCODING);
      out.write(texto);
      out.flush();
      out.close();
   } catch (UnsupportedEncodingException e) {
   //etc, bla, bla, catchichurri
}</pre>
<p>El método <em>guardarDocumentoXML()</em> un objeto FileOutputStream para escribir los datos del documento XML en un archivo (cuyo nombre define la variable NOMBRE_ARCHIVO_XML).</p>
<p>Continúa leyendo la segunda parte, en donde aprenderemos a Parsear archivos XML. Vamos parce!</p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/procesamiento-xml-java-xerces/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
	</channel>
</rss>

