czwartek, 3 września 2009

Programowanie: transformacja XSLT

Mam XML, który zawiera dane z loga pewnego programu.
Przykładowy log tylko z dwoma logami:
<root>

<item type="LOG_ENTRY">
<data value="1250868913404706700"/>
<data value="202"/>
<item type="System.String" value="DME"/>
<item type="System.String" value=""/>
<item type="System.String" value="CAS109DSW"/>
<item type="System.String" value="Info&#x20;1"/>
<data value="98"/>
<data value="1"/>
</item>

<item type="LOG_ENTRY">
<data value="1250868913404706700"/>
<data value="202"/>
<item type="System.String" value="DME"/>
<item type="System.String" value=""/>
<item type="System.String" value="CAS109DSW"/>
<item type="System.String" value="Info&#x20;2"/>
<data value="0"/>
<data value="8"/>
</item>

</root>


Powyższy XMLowy log chcemy przekształcić w zgrabną tabelę i umieścić ją na stronie WWW.
W tym celu zastosujemy transformacje XSLT, która przekształci nam pwyższego XML'a w zgrabną tabelkę.
Niestety, na pierwszy rzut oka, transformacja wygląda dość skomplikowanie.
Oto ona (w uproszczeniu):

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<html>
<body>
<h2>Log file</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>DateTime</th>
<th>Mod</th>
<th>Priority</th>
<th>Description</th>
</tr>
<xsl:for-each select="item">
<xsl:if test = "
item[1]/@value != 'ANS' or
item[1]/@value != 'STE'
">
<xsl:if test = "not( contains( item[4]/@value, 'TEXT FOR REMOVE') )" >
<tr>
<!--================================-->
<td arg="datetime">
<xsl:value-of select="data[1]/@value"/>
</td>
<!--================================-->
<td arg="module">
<xsl:value-of select="item[1]/@value"/>
</td>
<!--================================-->
<td arg="priority">
<xsl:value-of select="data[4]/@value"/>
</td>
<!--================================-->
<td arg="description">
<span font-size="large">
<xsl:value-of select="item[4]/@value"/>
</span>
</td>
</tr>
</xsl:if>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


Jako wynik transformacji, otrzymujemy zgrabną tabelkę:


Log file



DateTimeModPriorityDescription
1250868913404706700DME1Info 1
1250868913404706700DMEErrorInfo 2



Brak komentarzy:

Prześlij komentarz

Obserwatorzy