Je dois sélectionner toutes les productions dont la catégorie ne contient pas "Business"
Bien que j'aie voté pour la réponse de @Arran comme étant correcte, je voudrais également ajouter ceci... Interprétée de manière stricte, la spécification de l'OP serait mise en œuvre sous la forme suivante
//production[category[not(contains(., 'Business'))]]
plutôt que
//production[not(contains(category, 'Business'))]
Ce dernier sélectionne toutes les productions dont les premier category
enfant ne contient pas "Business". Les deux expressions XPath se comporteront différemment lorsqu'une expression production
n'a pas category
enfants, ou plus d'un.
Cela ne fait aucune différence dans la pratique tant que chaque <production>
a exactement un <category>
enfant, comme dans votre court exemple XML. Le fait que vous puissiez toujours compter sur le fait que cela soit vrai ou non dépend de divers facteurs, tels que l'existence d'un schéma qui applique cette contrainte. Personnellement, j'opterais pour l'option la plus robuste, car elle ne "coûte" pas grand-chose... en supposant que votre exigence, telle qu'elle est énoncée dans la question, soit réellement correcte (par opposition à, par exemple, "sélectionner chaque production qui n'a pas de catégorie contenant "Business"").