<?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; xml</title>
	<atom:link href="http://casidiablo.net/tag/xml/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.3.1</generator>
		<item>
		<title>Convertir XML a Array en PHP</title>
		<link>http://casidiablo.net/parser-xml-php/</link>
		<comments>http://casidiablo.net/parser-xml-php/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 06:10:35 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[parser]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xml2array]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=3614</guid>
		<description><![CDATA[PHP posee una completa API para la manipulación de archivos XML. Sin embargo, algunas veces queremos hacer cosas muy simples y no vale la pena construir manualmente un script que sirva de parser de un archivo XML. En esos casos, podemos hacer uso de una función llamada xml2array. La idea es bastante simple: le pasamos [...]]]></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%252Fparser-xml-php%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Convertir%20XML%20a%20Array%20en%20PHP%22%20%7D);"></div>
<p style="text-align: justify;">PHP posee una <a href="http://www.php.net/manual/en/book.xml.php">completa API para la manipulación de archivos XML</a>. Sin embargo, algunas veces queremos hacer cosas muy simples y no vale la pena construir manualmente un script que sirva de parser de un archivo XML. En esos casos, podemos hacer uso de una función llamada <a href="http://www.bin-co.com/php/scripts/xml2array/">xml2array</a>.</p>
<p style="text-align: justify;">La idea es bastante simple: le pasamos como argumento el string de un archivo XML y nos retorna un array asociativo con los datos del mismo. Los pasos son los siguientes:</p>
<p style="text-align: justify;">
<h3>0. Descargar la función</h3>
<p style="text-align: justify;">Lo primero es <a href="http://www.bin-co.com/php/scripts/xml2array/">descargar la función de aquí</a>. Copias el código PHP y lo pones en un archivo con nombre xml2array.php</p>
<p style="text-align: justify;">
<h3>1. Ejecutar la función [ejemplo]</h3>
<p style="text-align: justify;">Debemos usar la función <a href="http://php.net/manual/en/function.file-get-contents.php"><code>file_get_contents</code></a> para obtener el string con el XML que pasaremos como parámetro a la función. Suponiendo que tenemos este archivo XML:</p>
<pre class="brush: xml; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;
&lt;distros type=&quot;linux&quot;&gt;
    &lt;nombre id=&quot;1&quot;&gt;Gentoo&lt;/nombre&gt;
    &lt;nombre id=&quot;2&quot;&gt;Arch&lt;/nombre&gt;
    &lt;nombre id=&quot;3&quot;&gt;Exherbo&lt;/nombre&gt;
&lt;/distros&gt;</pre>
<p style="text-align: justify;">Podríamos usar xml2array así:</p>
<pre class="brush: php; highlight: [4]; title: ; notranslate">&lt;?php
require(&quot;xml2array.php&quot;);
$contenido = file_get_contents('datos.xml');
$resultado = xml2array($contenido);
var_dump($resultado);
?&gt;</pre>
<p>El resultado sería el dump del array:<span id="more-3614"></span></p>
<pre class="brush: php; title: ; notranslate">array(2) {
  [&quot;distros&quot;]=&gt;
  array(1) {
    [&quot;nombre&quot;]=&gt;
    array(6) {
      [0]=&gt;
      string(6) &quot;Gentoo&quot;
      [1]=&gt;
      string(4) &quot;Arch&quot;
      [&quot;0_attr&quot;]=&gt;
      array(1) {
        [&quot;id&quot;]=&gt;
        string(1) &quot;1&quot;
      }
      [&quot;1_attr&quot;]=&gt;
      array(1) {
        [&quot;id&quot;]=&gt;
        string(1) &quot;2&quot;
      }
      [2]=&gt;
      string(7) &quot;Exherbo&quot;
      [&quot;2_attr&quot;]=&gt;
      array(1) {
        [&quot;id&quot;]=&gt;
        string(1) &quot;3&quot;
      }
    }
  }
  [&quot;distros_attr&quot;]=&gt;
  array(1) {
    [&quot;type&quot;]=&gt;
    string(5) &quot;linux&quot;
  }
}</pre>
<p style="text-align: justify;">Veamos un ejemplo un poco más avanzado. Vamos a procesar un documento XML que proporciona Mercado Libre con productos a la venta; además vamos a mostrar un listado HTML con dichos productos:</p>
<pre class="brush: php; title: ; notranslate">&lt;?php
require(&quot;xml2array.php&quot;);
$contenido = file_get_contents('http://www.mercadolibre.com.co/jm/searchXml?as_categ_id=1648');
$resultado = xml2array($contenido);
$items = $resultado['response']['listing']['items']['item'];
foreach($items as $item)
    if(isset($item['title'])){
        echo &quot;&lt;p&gt;&lt;a href='{$item['link']}'&gt;&quot;;
        echo &quot;&lt;img src='{$item['image_url']}'/&gt;&lt;br/&gt;&quot;;
        echo &quot;&lt;b&gt;{$item['title']}&lt;/b&gt;&lt;/a&gt;&lt;br&gt;&quot;;
        echo &quot;&lt;em&gt;{$item['subtitle']}&lt;/em&gt;&lt;br&gt;&quot;;
        echo &quot;&lt;em&gt;{$item['currency']}&lt;/em&gt; {$item['price']}&lt;/p&gt;&quot;;
    }
?&gt;</pre>
<p style="text-align: justify;">Ejecutando el ejemplo anterior obtendremos algo como lo siguiente:</p>
<p style="text-align: center;"><img src="http://casidiablo.net/wordpress/wp-content/uploads/2010/02/php-mercado-libre.png" alt="" title="php-mercado-libre" width="512" height="259" class="alignnone size-full wp-image-3620" /></p>
<p style="text-align: justify;">
<h3>Descarga de los ejemplos</h3>
</p>
<p style="text-align: justify;">Puedes descargar los archivos usados en los ejemplos anteriores. Ten en cuenta que la versión de la función que está en la descarga es la última a la fecha (1 de febrero de 2010). Aunque funciona muy bien, los autores tienden a actualizarla, así que podrías echar un vistazo a la página oficial en busca de nuevas versiones.</p>
<p style="text-align: justify;"><a href="http://casidiablo.net/descargar/Ejemplo+Xml2Array" class="descargacodigo">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/parser-xml-php/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<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>36</slash:comments>
		</item>
		<item>
		<title>XML en Java &#8211; APIs y Parsers</title>
		<link>http://casidiablo.net/xml-java/</link>
		<comments>http://casidiablo.net/xml-java/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 18:26:38 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[artículos]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[desarrollo+software]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1330</guid>
		<description><![CDATA[El uso de XML es primordial al momento de desarrollar software, sobre todo empresarial, y Java por supuesto cuenta con APIs y Parsers que facilitan el trabajo con este tipo de documentos. A través de este pequeño artículo aprenderemos qué APIs y Parsers existen, y cual debemos escoger al momento de desarrollar una aplicación. En [...]]]></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%252Fxml-java%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22XML%20en%20Java%20-%20APIs%20y%20Parsers%22%20%7D);"></div>
<p>El uso de XML es primordial al momento de desarrollar software, sobre todo empresarial, y Java por supuesto cuenta con APIs y Parsers que facilitan el trabajo con este tipo de documentos. A través de este pequeño artículo aprenderemos qué APIs y Parsers existen, y cual debemos escoger al momento de desarrollar una aplicación. En futuros artículos pondré algunos ejemplos. Pero, primero lo primero:</p>
<h3>¿Qué es XML?</h3>
<p><a href="http://es.wikipedia.org/wiki/XML">XML</a> significa Extensible Markup Language, <strong>es un metalenguaje extensible de etiquetas</strong> desarrollado por el <a href="http://w3.org/">W3C</a>. XML <strong>no es realmente un lenguaje en particular</strong>, sino <strong>una manera de definir lenguajes</strong> para diferentes necesidades. Y por tanto tiene algunas <a href="http://es.wikipedia.org/wiki/XML#Ventajas_del_XML">ventajas</a>:</p>
<ul>
<li><strong>Es extensible</strong> (una vez que un xml fue diseñado y puesto en producción, es posible extenderlo con la adición de nuevas etiquetas de modo que los antiguos consumidores puedan continuar utilizando el servicio sin complicación alguna).</li>
<li><strong>El analizador es un componente estándar</strong>, no es necesario crear un analizador específico para cada lenguaje. Esto posibilita el empleo de uno de los tantos disponibles. De esta manera se evitan bugs y se acelera el desarrollo de la aplicación.</li>
<li>Si un tercero decide usar un documento creado en XML, <strong>es sencillo entender su estructura</strong> y procesarlo. Mejora la compatibilidad entre aplicaciones.</li>
</ul>
<h3>¿Qué es un XML Parser?</h3>
<p>Al momento de desarollar una aplicación que necesite leer archivos XML, no es conveniente crear piezas de código que hagan éste tipo de tareas desde cero. Un <strong>parser XML es una librería de clases que ofrece al programador métodos para manipular documentos XML</strong>, además de abstraer el funcionamiento complejo o no particular de XML, incluyendo:</p>
<ul>
<li>Resuleve referencias</li>
<li>Entiende las secciones <a href="http://en.wikipedia.org/wiki/CDATA">CDATA</a></li>
<li>Verificar si el documento está <a href="http://es.wikipedia.org/wiki/XML#Documentos_XML_bien_formados"><em>bien formado</em></a></li>
<li>Validar el documento contra su <a href="http://es.wikipedia.org/wiki/DTD">DTD</a></li>
<li>Asignar tipos y atributos</li>
</ul>
<p>Los Parsers XML generalmente pueden usar una o más APIs XML para llevar a cabo su misión. Pero&#8230; ¿qué son las APIs XML?</p>
<h3>APIs XML en Java</h3>
<p>Escoger un API XML es quizás <strong>una de las más importantes decisiones</strong> que debes tomar, de acuerdo al proyecto que se está desarrollando. Muchos Parsers tienen la capacidad de usar una u otra, por lo que es <em>relativamente</em> sencillo cambiar de parser si es necesario; por otro lado, cambiar de API puede llegar a ser bastante <em>doloroso</em>, incluso podrías tener que reescribir todo. Así que, se cuidadoso al momento de escoger alguno. He aquí una lista de los más importantes:</p>
<ul>
<li><a href="http://www.saxproject.org/"><strong>SAX</strong></a>: <em>Simple API for XML</em>, es de lejos la mejor API para XML. Es muy poco lo que no puedes hacer con dicha API. Las clases e interfaces de SAX modelan el parser, el flujo desde el cual los documentos son leídos, y la aplicación cliente recibe datos desde el parser. Sin embargo, ninguna clase modela el documento XML; en vez de ello, el parser provee el contenido a la aplicación cliente a través de una interfaz callback. Esto hace a SAX muy rápido y eficiente, puesto que no tiene que guardar el documento entero en la memoria. Esto hace que sea, por eficiencia, <strong>la única opción si deseas manipular documentos XML demasiado grandes</strong>.</li>
<li><a href="http://java.sun.com/j2se/1.4.2/docs/guide/plugin/dom/index.html"><strong>DOM</strong></a>: <em>Document Object Model</em>, es un API que modela un documento XML como un <em>árbol</em>. A diferencia de SAX, DOM puede leer y generar documentos XML. Cada documento XML es representado por un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a>. Toda operación (escribir ,leer, modificar, etc.) sobre dichos objetos se realiza a través de la invocación de métodos.</li>
<li><a href="https://jaxp.dev.java.net/"><strong>JAXP</strong></a>: <em>Java API for XML Processing</em>, es el API estándar de Java que envuelve tanto a SAX como a DOM. Por tanto, al momento de iniciar un proyecto, no te preguntas si usar SAX o JAXP, o DOM o JAXP. SAX y DOM son parte de JAXP.</li>
<li>Otras APIs para XML en <a href="http://casidiablo.net/java">Java</a> son: <a href="http://www.jdom.org/">JDOM</a>, <a href="http://www.dom4j.org/">dom4j</a>, <a href="http://www.xmlpull.org/">XMLPull</a>.</li>
</ul>
<h3>XML parsers para Java</h3>
<p>Aquí un pequeño listado de los parsers más usados:</p>
<ul>
<li><a href="http://xerces.apache.org/xerces-j/"><strong>XERCES</strong></a>: es parte de <a href="http://xml.apache.org/">Apache XML Project</a>, y es bastante completo. Además, soporta completamente a SAX, DOM y JAXP. Se distribuye bajo la <a href="http://www.apache.org/licenses/LICENSE-2.0.html">licencia Apache 2.0</a>, por lo cual tienes bastantes libertades al momento de usarlo.</li>
<li><a href="http://xml.apache.org/crimson/"><strong>Crimson</strong></a>: actualmente Crimson posee casi todas las características de xerces (soporta SAX, DOM, XML 1.0 y JAXP), y también forma parte del proyecto Apache XML. Fue desarrollado por ingenieros de Sun que no estaban de acuerdo en cómo XERCES parseaba los documentos XML; y aunque en un principio huvo un inmenso afán entre los dos grupos de desarrolladores por hacer más rápido y eficiente su proyecto, actualmente son casi igual de rápidos y confiables. Aunque éste no es muy usado, hay que decirlo.</li>
<li>Otros parsers son: <a href="http://saxon.sourceforge.net/aelfred.html">Ælfred</a> y <a href="http://piccolo.sourceforge.net/">Piccolo</a> (no se si tenga que ver con Dragon Ball Z).</li>
</ul>
<h3>Enlaces interesantes&#8230;</h3>
<ul>
<li><a href="http://xerces.apache.org/xerces-j/">Página oficial de xerces</a></li>
<li><a href="http://totheriver.com/learn/xml/xmltutorial.html">Introduction to XML and XML With Java</a></li>
<li><a href="http://www.cafeconleche.org/books/xmljava/chapters/ch05s02.html">XML Parsers</a></li>
</ul>

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

