2010-12-06 76 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的回答。