2009-10-29 8 views
0

Je le code XML suivant:C# XPath avec un OU

<users> 
<user> 
    <location>ny</location> 
    <status>1</status> 
</user> 
<user> 
    <location>nj</location> 
    <status>1</status> 
</user> 
<user> 
    <location>pa</location> 
    <status>50</status> 
</user> 
</users> 

Ce que je réellement besoin est tous les utilisateurs de New York ou nj qui ont également un statut 1.

Sur la base des réponses précédentes et quelques Googling supplémentaire je suis venu avec:

/users/user[location='ny' and status='1']|/users/user[location='nj' and status='1' 

Y at-il un moins verbeux à écrire cela? à-dire plus le long des lignes de:

/users/user[location='ny' | 'pa'] and /users/user[status='1'] 

Répondre

3

XPath que vous cherchez est:

/users/user[location='ny']|/users/user[status='1'] 

Vous pouvez tester ici:

http://www.futurelab.ch/xmlkurs/xpath.en.html

PS: Votre XML ci-dessus est incorrect (le statut est incorrectement fermé avec une étiquette de hauteur)

+0

XPath pour la deuxième version de la question:/users/user [(emplacement = 'ny' ou location = 'nj') et status = 1] –

1

due devrait également fonctionner:

/users/user[location='ny' | status='1'] 
+0

XPath ne fonctionne pas - au moins .Net – druta

0

// utilisateur [emplacement = 'ny' | status = '1'] //.[location='ny '| status = '1'] "

J'aurais fait de la localisation et du statut des attributs et des pêchés pour ceux-là. Ils ne font que gaspiller de l'espace comme ils sont. En outre, considérez pour votre texte si vous conservez la structure actuelle.

0

Il devrait être

/users/user[(location='ny' or location='nj') and (status = '1') ] 

Je ne pense pas '|' est valide dans le prédicat, car il représente l'expression de l'union dans la syntaxe XPath