J'ai un fichier XML qui ressemble à cet exemple:XSLT tri et le regroupement impliquant des attributs
<Data>
<defect>
<record-id>1</record-id>
<custom-field-value field-name="Release Version" field-value="1.0"/>
<custom-field-value field-name="Other info" field-value=""/>
<custom-field-value field-name="More info" field-value="blah"/>
<event include-in-release-notes="yes">
<notes>This is a release note to include</notes>
</event>
<event include-in-release-notes="no">
<notes>This is not a release note</notes>
</event>
</defect>
<defect>
<record-id>2</record-id>
<custom-field-value field-name="Release Version" field-value="1.5"/>
<custom-field-value field-name="Other info" field-value=""/>
<custom-field-value field-name="More info" field-value="blah"/>
<event include-in-release-notes="yes">
<notes>This is a release note to include for 1.5</notes>
</event>
<event include-in-release-notes="no">
<notes>This is not a release note</notes>
</event>
</defect>
</Data>
Ce que je suis en train de faire est de créer une notes de publication que les premières sortes et trouve tout de l'unique @ valeurs de champ des éléments dont le nom de champ @ est égal à "Release Version". Il peut y avoir d'autres éléments qui ne se rapportent pas à la version finale. Voici la sortie Je cherche:
Release Version: 1.0
o This is a release note to include
Release Version: 1.5
o This is a release note to include for 1.5
Release Verison: x.x
o one release note
o another release note
J'ai lu un tas sur la méthode « Muenchian » et le tri et le regroupement, mais je suis aux prises avec le fait que je les attributs que je dois comparer aux. La plupart des exemples que j'ai lus traitent du tri par éléments qui semble beaucoup plus intuitif. Et j'ai besoin de trouver et trier plusieurs attributs, eh bien, ma tête commence à exploser.
Je suis venu avec des feuilles de style qui va me donner tous les éléments qui ont « version Release » comme le texte en utilisant:
<xsl:key name="keyMajorReleases" match="custom-field-value" use="@field-name"/>
<xsl:for-each select=key('keyMajorReleases', 'Release Version')">
<xsl:sort order="descending" data-type="text" select="@field-value"/>
Mais qui leur donne tout pour moi, pas seulement ceux uniques . Et puis je n'ai pas compris comment obtenir l'élément 'événement' qui a la note de sortie que je dois imprimer.
Quand j'ai essayé d'utiliser « générer-id() », je ne reçois un résultat, comme je suppose qu'il n'y a qu'une seule entrée unique avec ma valeur pour trouver:
<xsl:for-each select="//custom-field-value[generate-id(.)=generate-id(key('keyMajorReleases', 'Release Version')[1])]">
Tim, merci pour votre aide! Je n'étais pas au courant de cette syntaxe dans la 'clé' et le 'select' pour spécifier un attribut spécifique égal à une valeur. Cela a fait l'affaire, merci encore! – Gunn