Compte tenu de ce XML:
<root> <list> <!-- foo's comment --> <item name="foo" /> <item name="bar" /> <!-- another foo's comment --> <item name="another foo" /> </list> </root>
3 Réponses :
Merci pour votre réponse approfondie VONC! J'ai essayé la construction "si" et ça marche pour moi. Je préférerais utiliser l'expression de Kevin cependant, car c'est quelque chose que je peux comprendre (et espérons-tout me rappeler).
Cela ne fonctionne pas dans la situation décrite par Martin Honnen.
@Dimitre: +1 sur votre réponse, et je laisse le mien comme wiki communautaire.
Merci, vous étiez très proche aussi.
Ceci semble fonctionner:
//comment()/following-sibling::*[1]/self::item
Que se passe-t-il s'il y a une instruction de traitement entre le commentaire et l'élément "Article"? Certes, un cas d'EDGE, mais l'affiche originale doit d'abord clarifier si un élément "élément" précédé d'une instruction de traitement précédée d'un commentaire est un élément qu'il souhaite sélectionner.
@Kevin: Merci, Kevin. Ce chemin X est assez simple pour que je puisse saisir, et cela fonctionne parfaitement :) @martin: heureusement, je suis le maître de l'entrée XML, alors je suis sûr que les instructions de traitement ne seront pas. Merci quand même pour l'indice utile.
ne fonctionne pas strong> dans le cas où il y a une instruction de propriété (ou un tout Groupe d'instructions de traitement) Entre le commentaire et l'élément - comme remarqué dans un commentaire de Martin Honnen. P> L'expression XPath suivante ne sélectionne que des nœuds d'éléments qui sont immédiatement précédés d'un nœud de commentaire ou sont immédiatement précédés d'un nœud texte à l'espace blanc, qui est immédiatement précédé d'un noeud de commentaires: P> xxx pré> Nous utilisons ce document XML: p> <item name="foo"/>
<item name="another foo"/>
<item name="immed.after 3"/>
Notez que dans le modèle de données XSLT / XPATH, ces éléments d'élément que vous recherchez A n'a pas été précédé d'un noeud de commentaires, mais plutôt d'un nœud texte avec un espace blanc. Donc, à moins que vous n'utilisiez code> dans vos feuilles de style ces nœuds de texte de l'espace blanc peuvent se mettre dans votre chemin.
Bonne question (+1). Consultez ma réponse pour la solution complète uniquement (à l'heure actuelle). Les commentaires de Martin Honnen sont corrects et, bien que la réponse actuellement sélectionnée puisse fonctionner pour vous, elle peut soudainement arrêter de le faire (si le moteur XPath est fourni avec un document XML, dont les nœuds de l'espace blanc ne sont pas dépouillés).