File interprete per XML di Celeste

Normativa tecnica inerente la classificazione e la certificazione energetica degli edifici, software Celeste, accreditamento tecnici, …
Rispondi
r.gaetano fabio, genova
Messaggi: 284
Iscritto il: ven mar 02, 2007 19:29
Località: Genova
Contatta:

File interprete per XML di Celeste

Messaggio da r.gaetano fabio, genova »

Ho buttato giù una bozza di un listato in XSLT ( eXtensible Stylesheet Language Transformation) per leggere, visualizzare e stampare i file XML di Celeste con un comune Browser (Explorer, FireFox, Google Crhome,..) senza dover lanciare nessun altro programma, è quindi in grado di girare anche sugli smartphone oltre che da computer.

Il problema da risolvere è la lettura dei nodi nidificati (strutture opache, trasparenti ed ombreggiamenti).
Con i modi di loop a me noti riporto sempre il valore del primo componente (vedi immagine sottostante) .
C' è qualcuno che conosce XSLT e possa aiutarmi a migliorarlo?

PS: Si tratterebbe di realizzare un applicativo freeware per CELESTE e tra l'altro sarebbe utilizzabile, con poche modifiche, anche per elaborare i certificati energetici XML delle altre regioni
rgf
r.gaetano fabio, genova
Messaggi: 284
Iscritto il: ven mar 02, 2007 19:29
Località: Genova
Contatta:

Re: File interprete per XML di Celeste

Messaggio da r.gaetano fabio, genova »

Problema risolto, ecco il listato completo:


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- Listato by Russo Gaetano Fabio, studioATing-russo.it. Uso libero citando la fonte -->
<!-- Leggi Nodi dei valori inseriti -->

<xsl:template match="/">
<div>
<!-- <p>package!</p> -->
<xsl:apply-templates select="*" mode="main"/>
</div>
</xsl:template>


<xsl:template match="/docetpro_dati/valori_inseriti" mode="main">
<title>
by rgf -
<xsl:value-of select="valore[@id='a.inp.424']" />
</title>
<font size="3" face="Arial Narrow">

<b>
CERTIFICATO ENERGETICO N^
<xsl:value-of select="valore[@id='a.inp.451']" />
RILASCIATO IL
<xsl:value-of select="valore[@id='a.inp.452']" />
SCADENZA
<xsl:value-of select="valore[@id='a.inp.454']" />
</b>

<!-- LINK PER APERTURA ALTRI LAVORI -->
<span id="link" style="position:relative; top: 10; left:200; ">
<a href="apriXMLceleste.htm" target="_blank" style="background-color:#ffff66"> APRI ALTRO
LAVORO</a>
</span>

<br />

Certificatore n^
<xsl:value-of select="valore[@id='a.inp.455']" />
,
<xsl:value-of select="valore[@id='a.inp.453']" />
<br />
Ubicazione immobile:
<xsl:value-of select="valore[@id='a.inp.424']" />
, proprieta':
<xsl:value-of select="valore[@id='a.inp.425']" />
<hr></hr>
<b>DESCRIZIONE EDIFICIO</b>
<br />
Dati catastali: Sezione
<xsl:value-of select="valore[@id='a.inp.428']" />
, foglio
<xsl:value-of select="valore[@id='a.inp.429']" />
, mappale
<xsl:value-of select="valore[@id='a.inp.427']" />
, sub:
<xsl:value-of select="valore[@id='a.inp.430']" />
, anno:
<xsl:value-of select="valore[@id='a.inp.426']" />
, codice Prov/Comune:
<xsl:value-of select="valore[@id='a.inp.131']" />
<br />
Zona climatica:
<xsl:value-of select="valore[@id='a.inp.131']" />
, superf.utile Au:
<xsl:value-of select="valore[@id='a.inp.55']" />
m2, volume lordo Vl:
<xsl:value-of select="valore[@id='a.inp.17']" />
m3, superf.disperdente Sd:
<xsl:value-of select="valore[@id='a.inp.450']" />
m2, rapporto Sd/Vl:
<xsl:value-of
select="format-number
(valore[@id='a.inp.450'] div valore[@id='a.inp.17'] , '0.00')" />
<br />
Costante di tempo edificio:
<xsl:value-of select="/docetpro_dati/risultati/risultato[@id='a.for.20']" />
h, capacita' termica:
<xsl:value-of select="/docetpro_dati/risultati/risultato[@id='a.tab.3']" />
kJ/m2K, ricambi d'aria:
<xsl:value-of select="/docetpro_dati/risultati/risultato[@id='a.for.10']" />
m3/h, coeff. ricambio aria:
<xsl:value-of
select="format-number(/docetpro_dati/risultati/risultato[@id='a.for.10'] div valore[@id='a.inp.17'] , '0.00')" />


<hr></hr>
<b>DESCRIZIONE IMPIANTO</b>
<br />
<xsl:value-of select="valore[@id='b.inp.378']" />
<br />
<xsl:value-of select="valore[@id='b.inp.375']" />
<br />
<xsl:value-of select="valore[@id='b.inp.376']" />
<br />
<xsl:value-of select="valore[@id='b.inp.409']" />
<hr></hr>

<b>INTERVENTI CONSIGLIATI</b>
<br />
<xsl:value-of select="valore[@id='f.inp.78']" />
: risp.energia
<xsl:value-of select="valore[@id='f.inp.65']" />
kWh/anno, costo:
<xsl:value-of select="valore[@id='f.inp.66']" />
Euro, TRI investimento:
<xsl:value-of select="valore[@id='f.inp.67']" />
anni
<br />
<hr></hr>

<!--TABELLA RISULTATI ENERGETICI ATTUALI/CONSEGUIBILI -->
<br />
<table width="50%" border="1">
<tr>
<td colspan="4" align="center" width="50%">
<b>RISULTATI ENERGETICI</b>
</td>
</tr>
<tr>
<td colspan="2" align="center" width="25%" style="background-color:#ffff66">
<b>ATTUALI</b>
</td>
<td colspan="2" align="center" width="25%" style="background-color:#66cc66">
<b>CONSEGUIBILI</b>
</td>
</tr>
<tr>
<td width="10%">
Epgl:
</td>
<td width="10%">
<xsl:value-of select="/docetpro_dati/risultati/risultato[@id='b.for.0b']" />
</td>
<td width="10%">
<xsl:value-of select="valore[@id='f.inp.57']" />
</td>
<td width="10%">
kWh/m2anno
</td>
</tr>
<tr>
<td width="10%">
Epi:
</td>
<td width="10%">
<xsl:value-of select="/docetpro_dati/risultati/risultato[@id='a.for.0b']" />
</td>
<td width="10%">
<xsl:value-of select="valore[@id='f.inp.58']" />
</td>
<td width="10%">
kWh/m2anno
</td>
</tr>
<tr>
<td width="10%">
Epacs:
</td>
<td width="10%">
<xsl:value-of
select="/docetpro_dati/risultati/risultato[@id='b.for.34b']" />
</td>
<td width="10%">
<xsl:value-of select="valore[@id='f.inp.59']" />
</td>
<td width="10%">
kWh/m2anno
</td>
</tr>
<tr>
<td width="10%">
Efficienza imp.:
</td>
<td width="10%">
<xsl:value-of
select="/docetpro_dati/risultati/risultato[@id='b.for.211']" />
</td>
<td width="10%">
<xsl:value-of select="valore[@id='f.inp.60']" />
</td>
<td width="10%">
1/EtaGs
</td>
</tr>
<tr>
<td width="10%">
Emissioni CO2 :
</td>
<td width="10%">
<xsl:value-of
select="/docetpro_dati/risultati/risultato[@id='b.for.210']" />
</td>
<td width="10%">
<xsl:value-of select="valore[@id='f.inp.81']" />
</td>
<td width="10%">
t/anno
</td>
</tr>
</table>
<br />
<hr></hr>
</font>

</xsl:template>


<!-- RIEPILOGO RISULTATI BILANCIO ENERGETICO -->
<xsl:template match="/docetpro_dati/risultati" mode="main" >
<font size="2" face="Arial Narrow">

<table width="50%" border="1">
<tr>
<td colspan="3" align="center" width="25%" style="background-color:#ffff66">
<b>RIEPILOGO RISULTATI BILANCIO ENERGETICO</b>
</td>
</tr>
<tr>
<td width="30%">Dispersioni per trasmissione: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='a.for.2']" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Dispersioni per ventilazione: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='a.for.7']" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Energia Elettrica Aux Risc.: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='b.for.16b']" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Apporti interni: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='a.for.11']" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Apporto solare: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='a.for.13']" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Energia per riscaldamento: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='b.for.2c']" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Fabbisogno Energia ACS: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='b.for.22']" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Energia dispersa ACS: </td>
<td width="10%">
<xsl:value-of
select="format-number(risultato[@id='b.for.21b']- risultato[@id='b.for.22'] , '##,##0.00')" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Energia Primaria per ACS: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='b.for.21b']" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Fabbisogno Energia Netta: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='a.for.0']" />
</td>
<td width="10%">kWh/anno</td>
</tr>
<tr>
<td width="30%">Energia Netta Specifica: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='a.for.0b']" />
</td>
<td width="10%">kWh/m2anno</td>
</tr>
<tr>
<td width="30%">Energia Primaria Risc.: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='b.for.39b']" />
</td>
<td width="10%">kWh/m2anno</td>
</tr>
<tr>
<td width="30%">Energia Primaria ACS: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='b.for.34b']" />
</td>
<td width="10%">kWh/m2anno</td>
</tr>
<tr>
<td width="30%">Energia Primaria Totale: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='b.for.0b']" />
</td>
<td width="10%">kWh/m2anno</td>
</tr>
<tr>
<td width="30%">Rendimento Stagionale: </td>
<td width="10%">
<xsl:value-of select="risultato[@id='b.for.200']" />
</td>
<td width="10%">adim.</td>
</tr>
</table>
<hr></hr>

<br />

<!-- RIEPILOGO OSTRUZIONI (OMBRE) -->

<table width="40%" border="1" style="background-color:#E4E4E4">
<tr>
<td colspan="4" align="center" width="100%">
<b>RIEPILOGO OSTRUZIONI (OMBRE)</b>
</td>
</tr>
<tr>
<td colspan="1" align="center" width="25%">
<b>
Esposizione
<br />
considerata
</b>
</td>
<td colspan="1" align="center" width="25%">
<b>
H edificio
<br />
(m)
</b>
</td>
<td colspan="1" align="center" width="25%">
<b>
Dist. ed. adiacente
<br />
(m)
</b>
</td>
<td colspan="1" align="center" width="25%">
<b>
H ed. adiacente
<br />
(m)
</b>
</td>
</tr>

<td>
<xsl:apply-templates select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.136']" mode="table_line" />
</td>
</table>

<br />

<br />

<!-- STRUTTURE TRASPARENTI (VETRI) -->

<table width="40%" border="1" style="background-color:#ccffff">
<tr>
<td colspan="3" align="center" width="100%">
<b>STRUTTURE TRASPARENTI (VETRI)</b>
</td>
</tr>
<tr>
<td colspan="1" align="center" width="50%">
<b>
Descrizione
<br />
finestra
</b>
</td>

<td colspan="1" align="center" width="20%">
<b>
Superficie
<br />
(m2)
</b>
</td>
<td colspan="1" align="center" width="30%">
<b>
Trasmittanza U
<br />
(W/m2K)
</b>
</td>
</tr>

<tr>
<td>
<xsl:apply-templates select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.201']" mode="table_line" />
</td>

</tr>

</table>

<br />

<hr></hr>



<!-- RIEPILOGO STRUTTURE OPACHE (MURI) -->

<table width="40%" border="1" style="background-color:#CC9933">
<tr>
<td colspan="3" align="center" width="100%">
<b>STRUTTURE OPACHE (MURI)</b>
</td>
</tr>
<tr>
<td colspan="1" align="center" width="50%">
<b>
Descrizione
<br />
muro
</b>

</td>

<td colspan="1" align="center" width="20%">
<b>
Superficie
<br />
(m2)
</b>
</td>
<td colspan="1" align="center" width="30%">
<b>
Trasmittanza U
<br />
(W/m2K)
</b>
</td>
</tr>





<xsl:apply-templates select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.200']" mode="table_line" />

</table>




</font>


</xsl:template>

<!-- RIFERIMENTI PER TABELLA OMBREGGIAMENTI -->
<xsl:template match="/docetpro_dati/valori_inseriti/valore[@id='a.inp.136']" mode="table_line">
<xsl:variable name="componente" select="@componente" />
<tr>
<td width="10%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.136' and @componente=$componente]" />
</td>
<td align="center" width="10%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.76' and @componente=$componente]" />
</td>
<td align="center" width="10%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.65' and @componente=$componente]" />
</td>
<td align="center" width="10%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.77' and @componente=$componente]" />
</td>
</tr>
</xsl:template>
<!-- RIFERIMENTI PER TABELLA VETRATE -->
<xsl:template match="/docetpro_dati/valori_inseriti/valore[@id='a.inp.201']" mode="table_line">
<xsl:variable name="componente" select="@componente" />
<tr>
<td width="30%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.201' and @componente=$componente]" />
</td>
<td align="center" width="5%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.11' and @componente=$componente]" />
</td>
<td align="center" width="5%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.155' and @componente=$componente]" />
</td>
</tr>
</xsl:template>
<!-- RIFERIMENTI PER TABELLA MURI -->
<xsl:template match="/docetpro_dati/valori_inseriti/valore[@id='a.inp.200']" mode="table_line">
<xsl:variable name="componente" select="@componente" />
<tr>
<td width="30%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.200' and @componente=$componente]" />
</td>
<td align="center" width="5%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.7' and @componente=$componente]" />
</td>
<td align="center" width="5%">
<xsl:value-of
select="/docetpro_dati/valori_inseriti/valore[@id='a.inp.89' and @componente=$componente]" />
</td>
</tr>
</xsl:template>

</xsl:stylesheet>


Buon Natale!
rgf
girondone
Messaggi: 12825
Iscritto il: ven mar 16, 2007 09:48
Località: SV

Re: File interprete per XML di Celeste

Messaggio da girondone »

se puoo
spiegati meglio che sono ignorante....
:mrgreen: :D
r.gaetano fabio, genova
Messaggi: 284
Iscritto il: ven mar 02, 2007 19:29
Località: Genova
Contatta:

Re: File interprete per XML di Celeste

Messaggio da r.gaetano fabio, genova »

girondone ha scritto:se puoo
spiegati meglio che sono ignorante....
:mrgreen: :D
Il listato è scritto in XSLT ed è in grado di leggere e stampare i file di Celeste senza utilizzare software commerciali.

Quali sono i vantaggi? Eccone alcuni:
1. la rapidità di esecuzione (solo 15kb di codice);
2. la possibilità di aprire più file contemporaneamente;
3. la possibilità di visualizzare tutti i dati in una paginetta
4. la possibilità di estrapolare solo i dati che ci interessano
5. la possibilità di far visualizzare i dati anche al cliente senza che questo disponga di software commerciali;
6. E' gratis (e poi dicono che i genovesi sono tirchi)
7... continua tu....

Come si fa a creare il file XSLT?
1. seleziona il listato che ho scritto qui sopra e copialo in memoria (tasto destro mouse-Copia-)
2. apri blocco note ( (Start/Programmi/Accessori/Blocco note), incolla e salva il contenuto nominando il file ordinaCeleste.xsl
3. creati una directory dove mettere il file xsl e i file xml di Celeste che vuoi leggere (per provare è meglio se fai una copia dei files XML). I files XML e il file XSLT devono essere nella stessa directory.

Come si fa a leggere i file XML di Celeste?
Se non disponi di XML Notepad o similari puoi utilizzare il tuo browser (Explorer, Firefox, Mozilla, Google Crhome,....) però in questo caso devi creare un collegamento all'interno del file XML che richiami automaticamente all'avvio il traduttore ordinaCeleste.xsl.
E' abbastanza semplice, devi fare in questo modo:
1. seleziona con il tasto destro del mouse il file XML interessato e scegli "Apri con" selezionando Blocco note;
2. Subito sotto la prima riga aggiungi la seguente:
<?xml-stylesheet type="text/xsl" href="ordinaCeleste.xsl?>
3. chiudi e salva il xml di Celeste.

Se tutto è Ok aprendo il nuovo file XML si avvierà automaticamente anche l'interfaccia di ordinaCeleste.xsl e sarai in grado di visualizzarne in modo comprensibile il contenuto del tuo certificato energetico (come da schermata riportata all'inizio del topic, ovviamente con tabelle corrette).

Ciao
rgf
girondone
Messaggi: 12825
Iscritto il: ven mar 16, 2007 09:48
Località: SV

Re: File interprete per XML di Celeste

Messaggio da girondone »

grazie mille
potrebbe venire utile
r.gaetano fabio, genova
Messaggi: 284
Iscritto il: ven mar 02, 2007 19:29
Località: Genova
Contatta:

Re: File interprete per XML di Celeste

Messaggio da r.gaetano fabio, genova »

Utile lo è (almeno a me sembra), ma la vera utilità è nel linguaggio in cui è scritto: XSLT.
Per scriverlo basta un note pad, non richiede compilatori, librerie strane o linguaggi di programmazione virulenti. Ma soprattutto oltre che gratis è OPEN!
Chiunque può aggiungerci un pezzetto di codice, magari con qualche calcolino che trasformi i kWh/anno in consumo equivalente di combustibile, confronti le differenze tra 2 diversi certificati, effettui una pivot list tra tutti i certificati eseguiti, analizzi in modo automatico i dati non congrui, ecc...ecc...

Basta un piccolo sforzo di ciascuno per fare grandi cose

PS: A scanso di equivoci preciso che i software commerciali, Edilclima in particolare, sono comunque essenziali e non potranno essere sostituiti completamente da XSLT.
Questo applicativo rende solo più semplice la visualizzazione e gestione dei dati XML già elaborati dai software termotecnici.

Ciao
rgf
Rispondi