Tag : Anti patrones

Anti Patrones Java – Manejo de XML

Una mala práctica en el manejo de documentos XML es no hacer uso de parsers o analizadores. El siguiente código muestra un escenario común:

int inicio = xml.indexOf("<nombre>");
int fin = xml.indexOf("</nombre>");
String nombre = xml.substring(inicio, fin);

El método anterior que en apariencia funciona, tiene los siguientes inconvenientes:

  • Puede haber mas de un nodo «name» en el documento.
  • El contenido de «name» puede no estar hecho de caracteres de datos solamente.
  • Puede haber caracteres escapados en los datos.
  • Si los datos contenidos en el nodo son CDATA puede no devolver el resultado esperado.
  • El documento XML puede tener namespaces.

En general un documento XML es mucho mas complejo que es un String de java, por el tipo de operaciones que están implícitas en la lectura. Para leer de forma correcta el contenido de un documento XML existen analizadores como Xerces que ademas son muy ligeros. El equivalente en JDOM es el siguiente:

SAXBuilder builder = new SAXBuilder(false);
Document doc = doc = builder.build(new StringReader(xml));
String nombre = doc.getRootElement().getChild("nombre").getText();

Otra mala práctica en el manejo de XML que es muy común es en la construcción del documento, haciendo algo como esto:

String nombre = ...
String atributo = ...
String xml = "<root>"
            +"<nombre atr=\""+ atributo +"\">"
            + nombre
            +"</nombre>"
            +"</root>";

Cuando lo correcto es hacer más bien lo siguiente:

Element root = new Element("root");
root.setAttribute("atr", atributo);
root.setText(nombre);
Document doc = new Documet();
doc.setRootElement(root);
XmlOutputter out = new XmlOutputter(Format.getPrettyFormat());
String xml = out.outputString(root);

Olvidándonos de escapar caracteres y con la sentencia

XmlOutputter out = new XmlOutputter(Format.getPrettyFormat())

Le damos el formato visual adecuado a nuestro documento.  También podremos agregar namespaces a nuestros nodos sin ningún problema. JDom es sin duda una magnifica opción para manejar documentos XML.

JDom es sin duda una magnifica opción para manejar documentos XML.