2010-12-06 22 views
3

XML Source:XPath pour obtenir l'ID maximale

<schools> 
    <school> 
     <name>School A</name> 
     <student> 
      <name>Student A</name> 
      <id>12345</id> 
     </student> 
     <student> 
      <name>Student B</name> 
      <id>45678</id> 
     </student> 
    </school> 
    <school> 
     <name>School C</name> 
     <student> 
      <name>Student C</name> 
      <id>91178</id> 
     </student> 
     <student> 
      <name>Student D</name> 
      <id>99999</id> 
     </student> 
    </school> 
</schools> 

Je suis encore un débutant à XPath. Je veux obtenir l'étudiant avec le plus haut ID global (donc 99999 dans l'exemple), pas de chaque école. Je ne peux pas changer mon code python qui est

tree.xpath(" ... ") 

Je peux seulement modifier le xpath. J'ai essayé "//student[not(../student/id > id)] mais cela me donne les id les plus élevés des écoles respectives. Ce que je veux, c'est l'ID le plus élevé. Comment devrais-je modifier mon xpath?

Édité: Comment écrire à partir du niveau de l'école? Je veux dire que si je veux le nom de l'école qui sort "étudiant le plus haut"?

Répondre

12

Qu'en est-:

//student[not(../../school/student/id > id)] 

Ou, plus simplement:

//student[not(//student/id > id)] 

Pour obtenir l'élément <school/> avec l'ID le plus élevé d'étudiants, je crois que cela va fonctionner:

//school[student[not(//student/id > id)]] 
+0

merci beaucoup! c'est exactement ce que je cherche –

+0

Comment écrire à partir du niveau scolaire? Je veux dire que si je veux le nom de l'école qui sort "étudiant le plus haut"? –

+0

@Kaung: J'ai ajouté cette expression à ma réponse. – cdhowie

2

Utilisation:

/schools/school[student[not(../../school/student/id > id)]]/name 

Ou plus court (juste pour ce schéma):

/*/school[*/id[not(//id > .)]]/name 
2

... Juste pour l'exhaustivité Si vous pouviez avait XPath 2.0 disponible, vous pouvez utiliser max(), comme dans:

/*/school[*/id = max(//id)]/name 

C'est un peu plus facile que dans XPath 1.0.

Cependant, AFAIK vous n'avez pas XPath 2.0 disponible en Python. Alors allez avec la réponse de @ cdhowie ou @ Alejandro.