Ceci est un exemple de mon fichier d'entrée.Il est possible de définir une priorité sur une clause "group-starting-with"?
<root>
<!-- [...] -->
<bbb>Foo 1</bbb>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<bbb>Foo 2</bbb>
<ccc>Foo 2.1</ccc>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<bbb>Foo 3</bbb>
<ccc>Foo 3.1</ccc>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<ccc>Foo 4</ccc>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
</root>
Je veux regrouper les noeuds par les éléments bbb et ccc. Il est également possible qu'il n'y ait que bbb ou seulement ccc dans l'entrée-xml.
Il y a des conditions suivantes:
- condition A: groupe par "bbb" ou "ccc" élément
- condition B: si un "ccc" suit immédiatement un "bbb" les prendre ensemble
C'est le outpout-xml je veux avoir:
<root>
<group>
<header>Foo 1</header>
<groupcontent>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
</groupcontent>
</group>
<group>
<header>Foo 2</header>
<subheader>Foo 2.1</subheader>
<groupcontent>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
</groupcontent>
</group>
<group>
<header>Foo 3</header>
<subheader>Foo 3.1</subheader>
<groupcontent>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
</groupcontent>
</group>
<group>
<subheader>Foo 4</subheader>
<groupcontent>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
<aaa>xxxxxxxx</aaa>
</groupcontent>
</group>
</root>
Actuellement i ha en Je suis XSL. Mais le problème est qu'il génère foreach "Foo" un "groupe" -Element.
<xsl:stylesheet>
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<output>
<xsl:for-each-group select="root/*" group-starting-with="bbb|ccc">
<group>
<xsl:apply-templates select="current-group()[self::bbb or self::ccc]"></xsl:apply-templates>
<groupcontent>
<xsl:apply-templates select="current-group()[not(self::bbb) and not (self::ccc)]"></xsl:apply-templates>
</groupcontent>
</group>
</xsl:for-each-group>
</output>
</xsl:template>
<xsl:template match="bbb">
<header><xsl:value-of select="."></xsl:value-of></header>
</xsl:template>
<xsl:template match="ccc">
<subheader><xsl:value-of select="."></xsl:value-of></subheader>
</xsl:template>
<xsl:template match="aaa">
<p><xsl:value-of select="."></xsl:value-of></p>
</xsl:template>
</xsl:stylesheet>
Comment puis-je ajouter la condition B à mon XSL. Est-il même possible de résoudre cela avec un groupe foreach? Est-ce que je peux ajouter la condition B au "groupe commençant-avec" et lui donner une priorité plus élevée que la condition A? J'ai lu quelque chose que vous pouvez donner des modèles une priorité ...
thx à l'avance cpt.oneeye
Grande solution (+1). Cependant le formatage était si mauvais que j'ai édité votre réponse. S'il vous plait, n'écrivez jamais: '
salut alejandro, merci (encore) pour la solution. cela a bien fonctionné –
@Dimitre: Merci pour l'édition.J'ai seulement changé le modèle pour le groupement.Je devrais payer l'attention à ces instructions vides. –