2010-12-06 99 views
3

XML來源:XPath來獲得最大的ID

<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> 

我還是一個初學者的XPath。我想讓學生獲得總體最高的ID(例如99999),而不是每所學校。我不能改變我的Python代碼是

tree.xpath(" ... ") 

我只能修改的XPath。我試過"//student[not(../student/id > id)],但是這給了我各自學校的最高身份證學生。我想要的是整體最高ID。我應該如何修改我的xpath?

編輯: 如何從學校層面開始寫作?我的意思是,如果我想要「最高身份證」學生退出的學校名稱?

回答

12

什麼:

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

或者更簡單地說:

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

要獲得最高的學生證的<school/>元素,我相信這將工作:

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

非常感謝!這正是我要找的 – 2010-12-06 11:07:29

2

使用:

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

或者更短(只此架構):

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

只是爲了完整性......如果你能有XPath 2.0中可用,您可以使用max(),如:

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

這比XPath 1.0更容易一些。

但是AFAIK在Python中沒有XPath 2.0可用。所以請使用@cdhowie或@ Alejandro的回答。