Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub

Il codice che vi mostrerò serve per trasformare un XML in un altro XML usando la "tecnologia" XSLT e come linguaggio base il Java.

Questo è l'XML iniziale, quello che si vuole normalizzare:
<?xml version="1.0" encoding="ISO-8859-1"?>    
<?xml-stylesheet type="text/xsl" href="./stileSemplificato.xslt"?> 
 
<appunti>
<appunto>
<autore suffisso="Ing" genere="maschio">Pasturenzi Francesco</autore>
<titolo> Creazione di un XML</titolo>
<descrizione>  descrizione di "Creazione di un XML" </descrizione>
<link tipo="esterno">http://www.sito-esterno.it</link>
<creato>22/07/2013 11:10:01</creato>
<pubblicato>23/07/2013 11:11:01</pubblicato>
</appunto>
<appunto>
<autore suffisso="Dott" genere="femmina">Clerico Silvia</autore>
<titolo> Creazione di un POS</titolo>
<descrizione>  descrizione di "Creazione di un POS" </descrizione>
<link tipo="interno">http://www.appuntivari.net</link>
<creato>22/07/2013 11:10:01</creato>
<pubblicato>25/07/2013 11:11:01</pubblicato>
</appunto>
</appunti>  
 
Questo è il XML che si vuole ottenere in output:
 
Importante: come si può notare è un XML senza gli attributi descrittivi dei tag.
 
<?xml version="1.0" encoding="iso-8859-1"?><xmlRidotto>
<appunto>
<autore>Pasturenzi Francesco</autore>
<titolo> Creazione di un XML</titolo>
<descrizione>  descrizione di "Creazione di un XML" </descrizione>
<link>http://www.sito-esterno.it</link>
<creato>22/07/2013 11:10:01</creato>
<pubblicato>23/07/2013 11:11:01</pubblicato>
</appunto>
<appunto>
<autore>Clerico Silvia</autore>
<titolo> Creazione di un POS</titolo>
<descrizione>  descrizione di "Creazione di un POS" </descrizione>
<link>http://www.appuntivari.net</link>
<creato>22/07/2013 11:10:01</creato>
<pubblicato>25/07/2013 11:11:01</pubblicato>
</appunto>
</xmlRidotto>
 
Questo invece è l' XSLT, un insieme di regole da applicare all' XML iniziale:
<?xml version="1.0" encoding="ISO-8859-1"?>    
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">    
<xsl:output method="xml" media-type="text" version="1.0" encoding="iso-8859-1" indent="yes"/>
 
<xsl:template match="/"> 
       <xmlRidotto>
         <xsl:apply-templates select="//appunto" />
       </xmlRidotto>
</xsl:template>
 
<xsl:template match="//appunto">    
<appunto>
<autore>
<xsl:value-of select="autore"></xsl:value-of>
</autore>
<titolo>
<xsl:value-of select="titolo"></xsl:value-of>
</titolo>
<descrizione>
<xsl:value-of select="descrizione"></xsl:value-of>
</descrizione>
<link>
<xsl:value-of select="link"></xsl:value-of>
</link>
<creato>
<xsl:value-of select="creato"></xsl:value-of>
</creato>
<pubblicato>
<xsl:value-of select="pubblicato"></xsl:value-of>
</pubblicato>
</appunto>
</xsl:template>
 
</xsl:stylesheet>
 
Come si può notare, vado a prendere dall'XML iniziale solo il "contenuto" dei tag saltando gli attributi se esistono. Il comando per leggere anche il contenuto/valore di un attributo é:
<xsl:value-of select="@nome_attributo"/>
Un altra cosa il comando <xsl:output> serve a definire il formato del file di ouput generato dal XSL/XSLT.
 
Adesso vediamo il codice Java che ci permette di applicare uno stile XSLT ad un certo file XML e produrre in output un nuovo, ma più semplice, file XML.
 
Codice Java
package appuntivari.xml.test;
 
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
 
 
public class TestXMLtoXML {
 
 
public static void main(String[] args) throws IOException{
 
        String dataXML = "file/elencoAppunti.xml";
        String inputXSL = "file/stileSemplificato.xslt";
        String outputXML = "file/output.xml";
 
        TestXMLtoXML st = new TestXMLtoXML();
        try{
            st.transform(dataXML, inputXSL, outputXML);
        } catch (TransformerConfigurationException e){
            System.err.println("TransformerConfigurationException");
            System.err.println(e);
        }catch (TransformerException e) {
            System.err.println("TransformerException");
            System.err.println(e);
        }
 
    }
 
 
    public void transform(String dataXML, String inputXSL, String outputXML)
            throws TransformerConfigurationException, TransformerException, IOException{
 
        TransformerFactory factory = TransformerFactory.newInstance();
        StreamSource xslStream = new StreamSource(inputXSL);
        Transformer transformer = factory.newTransformer(xslStream);
        StreamSource in = new StreamSource(dataXML);
        StreamResult out = new StreamResult(outputXML);
        transformer.transform(in, out); /* applica lo stile e crea il file sul filesystem */
        
/* stampo a console il contentuto del nuovo file XML */
        System.out.println("XML generato:" + outputXML);
        System.out.println("\nLeggo XML creato:\n");
        BufferedReader xmlCreato = new BufferedReader(new FileReader(outputXML));
        String l;
        while((l = xmlCreato.readLine()) != null ){
        System.out.println(l);
        }
        xmlCreato.close();
 
    }
 
}
 
You can find this project on my GitHub Repository at this repository URL: https://github.com/pastuweb/xml-to-xml
 
Average (1 Vote)
The average rating is 5.0 stars out of 5.