Voici un exemple XMLJe dois passer de XML à HTML. Je dois identifier les éléments qui a une valeur commune et la fusion à une colonne de table unique en HTML
<?xml version='1.0' encoding='UTF-8'?>
<message>
<body>
<asset>
<asset-id>test_01</asset-id>
<asset-name>report_test</asset-name>
<asset-version>1</asset-version>
<entity>
<id>project_test</id>
<entity-record>
<id>864d6141-712b-11e7-b775-f9304f8b3051#-</id>
<field>
<id>name</id>
<value>Transport</value>
</field>
<field>
<id>task</id>
<value>Person1</value>
</field>
</entity-record>
<entity-record>
<id>864d6141-812b-11e7-b775-f9304f8b3951#-</id>
<field>
<id>name</id>
<value>Transport</value>
</field>
<field>
<id>task</id>
<value>Person2</value>
</field>
</entity-record>
<entity-record>
<id>864d6141-712b-11e7-b775-f9314f8b3951#-</id>
<field>
<id>name</id>
<value>Food </value>
</field>
<field>
<id>task</id>
<value>Person3</value>
</field>
</entity-record>
<entity-record>
<id>864e6141-712b-11e7-b775-f9304f8b3951#-</id>
<field>
<id>name</id>
<value>Food</value>
</field>
<field>
<id>task</id>
<value>Person4</value>
</field>
</entity-record>
<entity-record>
<field>
<id>name</id>
<value>Food</value>
</field>
<field>
<id>task</id>
<value>Person5</value>
</field>
</entity-record>
<entity-record>
<field>
<id>name</id>
<value>Transport</value>
</field>
<field>
<id>task</id>
<value>Person3</value>
</field>
</entity-record>
</entity>
</asset>
</body>
</message>
Et voici une pauvre tentative i essayé d'utiliser la méthode Muenchian pour les deux premiers cellules.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:key name="fieldbyid" match="field" use="value" />
<xsl:template match="message">
<html>
<body>
<table border="1">
<tr>
<td>Project</td>
<td>Task</td>
</tr>
<tr>
<xsl:for-each select="body/asset/entity[id[text()='project_test']]/entity-record">
<xsl:sort select="field[id[text()='name']]/value"/>
<xsl:for-each select="field[count(./value|key('fieldbyid','value')[1])=1]">
<tr>
<td rowspan="{count(key('fieldbyid','value'))}">
<xsl:value-of select="field[id[text()='name']]/value"/>
</td>
<td><xsl:value-of select="field[id[text()='task']]/value"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
est ici la sortie je reçois
<html>
<body>
<table border="1">
<tr>
<td>Project</td>
<td>Task</td>
</tr>
<tr>
<tr>
<td>Food</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Person4</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Food</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Person5</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Food </td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Person3</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Transport</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Person1</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Transport</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Person2</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Transport</td>
<td rowspan="0"></td>
<td></td>
</tr>
<tr>
<td>Person3</td>
<td rowspan="0"></td>
<td></td>
</tr>
</tr>
</table>
</body>
</html>
Voilà comment je veux que ma sortie à regarder, enter image description here enter image description here Le retrait de la seconde boucle, qui maintient le code sur pour loop, <xsl:for-each select="field[count(./value|key('fieldbyid','value')[1])=1]">
il semble qu'il affiche au moins les valeurs. Que signifie cette déclaration? Également sur la valeur pour "." montre à la fois l'identifiant et la valeur, c'est pourquoi j'ai utilisé ./valeur dans ce cas. Toute aide serait géniale! Merci
Je ne comprends pas ce que vous voulez comme la sortie - s'il vous plaît expliquer la logique dans les mots. - Si vous pouvez utiliser XSLT 2.0, pourquoi n'utilisez-vous pas 'xsl: for-each-group' à la place du groupement Muenchian? –
Et je ne vois aucun montant dans votre entrée. –