J'ai un peu de mal à obtenir une liste unique d'éléments (basée sur le nom) qui ont également un certain attribut. Je peux obtenir une liste de l'un ou l'autre de ces éléments, mais c'est la liste combinée qui me pose problème. Mon xml ressemble à ceci :
<global>
<discipline name="tracks">
<group name="Normal"/>
<group name="Gloss" PackGroup="Diffuse"/>
<group name="Mask"/>
<group name="Diffuse"/>
<group name="Tint" PackGroup="Gloss"/>
</discipline>
<discipline name="trains">
<group name="Mask"/>
<group name="Diffuse" PackGroup="Mask"/>
</discipline>
</global>
Je peux obtenir une liste distincte d'éléments de groupe assez facilement en utilisant cette requête xpath :
/configuration/global/discipline/group[not(@name = following::group/@name)]
et l'obtention de la liste des éléments de groupe pour lesquels l'attribut PackGroup est défini est également triviale :
/configuration/global/discipline/group[@PackGroup]
Cependant, je ne parviens pas à obtenir une liste unique des éléments dont l'attribut PackGroup est défini. j'ai essayé ceci :
/configuration/global/discipline/group[not(@name = following::group/@name) and @PackGroup]
/configuration/global/discipline/group[not(@name = following::group/@name) and contains(@PackGroup, '*')]
qui ne renvoient aucun élément et
/configuration/global/discipline/group[not(@name = following::group/@name) and contains(@PackGroup, '')]
qui ne renvoie que la liste unique. Je ne sais pas si quelqu'un sait quelle est la requête xpath correcte pour obtenir ce que je cherche.
(je travaille en C# et en xpath 2.0 au cas où cela aurait de l'importance)
merci !