FAM - Tractament XML amb XSLT

1. Introducció

 

Al projecte eNoti s'ha definit una classe que formateja dades XML amb una plantilla XSLT. 

Per motius del projecte, la entrada i sortida de les dades es fa per String, mentre que la plantilla és un recurs del projecte que es recupera per fitxer. Això es pot personalitzar acceptant altres tipus de entrada i/o sortida.

 

2. Exemple eNoti

A mode de exemple, mostrem la implementació del eNoti. En aquest projecte, s'ha definit una classe (XsltTransformer) que parseja un XML rebut per paràmetre amb una plantilla fixa.

 

2.1. Transformador

Aquesta classe bàsicament fa tractament de Strings i fitxers i amb el package javax.xml.transform fa la fusió de dades amb la plantilla.

 

/**
 * The Class XsltTransformer.
 */
public class XsltTransformer {

    /**
     * The Constant PATH_TEMPLATE_XSLT.
     */
    private static final String PATH_TEMPLATE_XSLT = "/generic.xslt";
    /**
     * Transform.
     *
     * @param dataXml the data xml
     * @return the string
     * @throws DibaException the diba exception
     */

    public String transform(String dataXml) throws DibaException {
        try {
            Source src = new StreamSource(new java.io.StringReader(dataXml));

            InputStream template = getClass().getResourceAsStream(PATH_TEMPLATE_XSLT);

            TransformerFactory factory = TransformerFactory.newInstance();
            StreamSource xslStream = new StreamSource(template);
            Transformer transformer = factory.newTransformer(xslStream);

            StringWriter writer = new StringWriter();
            StreamResult out = new StreamResult(writer);

            transformer.transform(src, out);
            return writer.toString();
        } catch (Exception e) {
            throw new DibaException(AppMessage.ERROR_XSLT_TRANSFORM, e);
        }
    }
}

 

 

Aquesta classe es pot reaprofitar per altres projectes i és pot adaptar per treure-li millor rendiment. 

Per exemple, si un projecte té una taula on cada registre té un XML i una plantilla definida, aquesta classe haurà de rebre els dos paràmetres per String.

 

2.2. Plantilla

La plantilla definida al eNoti, és una plantilla que pinta qualsevol XML de manera formatejada 

 

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/">
    <table>
      <xsl:apply-templates select="/DadesEspecifiques/*"/>
    </table>
  </xsl:template>

  <xsl:template match="*">
    <tr>
      <td>
        <p class="xmlTag"><xsl:value-of select="name()"/></p>
      </td>
      <td>
        <p class="xmlValue"><xsl:value-of select="."/></p>
      </td>
    </tr>
  </xsl:template>

  <xsl:template match="*[*]">
    <tr>
      <td>
        <p class="xmlTag"><xsl:value-of select="name()"/></p>
      </td>
      <td>
        <table class="xmlSubTable">
          <xsl:apply-templates/>
        </table>
      </td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

 

Xslt en sí és un 'llenguatge' i té tot un seguit de especificacions que s'hauran de estudiar si és necessari

3
Etiquetes:
FAM, XML, XSLT
1
Grups de treball:
Plataforma JEE