J'ai un fichier XML qui ressemble à ce qui suit ...XSLT: Regroupement et tri .... comment?
<states>
<state>
<name>North Carolina</name>
<city>Charlotte</city>
</state>
<state>
<name>Alaska</name>
<city>Fairbanks</city>
</state>
<state>
<name>Virginia</name>
<city>Leesburg</city>
</state>
<state>
<name>Alaska</name>
<city>Coldfoot</city>
</state>
<state>
<name>North Carolina</name>
<city>Harrisburg</city>
</state>
<state>
<name>Virginia</name>
<city>Ashburn</city>
</state>
</states>
Je dois produire un rapport qui répertorie chaque état, est l'ordre alphabétique avec chaque ville suivante .... tels que ..
Alaska - Fairbanks, Coldfoot
North Carolina - Charlotte, Harrisburg
Virginia - Leesburg, Ashburn
(les villes ne doivent pas être en ordre alphabétique, seulement les états)
J'ai essayé de résoudre ce problème en faisant un for-each sur les états/état, le tri par nom et son traitement. Comme cela ....
<xsl:for-each select="states/state">
<xsl:sort select="name" data-type="text" order="ascending"/>
<xsl:value-of select="name"/>-<xsl:value-of select="city"/>
</xsl:for-each>
Cela m'a donné ....
Alaska - Fairbanks
Alaska - Coldfoot
North Carolina - Charlotte
North Carolina - Harrisburg
Virginia - Leesburg
Virginia - Ashburn
Le tri a travaillé, maintenant je veux groupe. La seule chose que je pouvais penser à faire était de comparer à l'état précédent, puisqu'il est trié, il devrait reconnaître si la valeur d'état n'a pas changé. Comme ça ...
<xsl:for-each select="states/state">
<xsl:sort select="name" data-type="text" order="ascending"/>
<xsl:variable name="name"><xsl:value-of select="name">
<xsl:variable name="previous-name"><xsl:value-of select="(preceding-sibling::state)/name">
<xsl:if test="$name != $previous-name">
<br/><xsl:value-of select="name"/>-
</xsl:if>
<xsl:value-of select="city"/>
</xsl:for-each>
Malheureusement, il semble que la fonction preceding-sibling ne fonctionne pas bien avec le genre, donc, la première fois à (la première de l'Alaska), il a vu la première Caroline du Nord comme frère précédent. Cela provoque des résultats étranges, ce qui n'était pas du tout à mon goût. Donc, j'utilise XSLT1.0 ... Des idées/suggestions?
Merci
commence à lire à ce sujet .... s'est perdu rapidement. Je vais essayer à nouveau. – Doug
Ouais, je ne vais pas mentir, vous avez du travail à faire pour vous. Je l'ai seulement mis en application quelques fois mais je lutte toujours ... –