XPath使用最大值获取节点

时间:2016-05-11 23:20:44

标签: xslt xpath

说我有很多这样的元素:

<rs>
 <r>
  <roomID>ID2</roomID>
 </r>
 <r>
  <roomID>ID2</roomID>
 </r>
 <r>
  <roomID>ID3</roomID>
 </r>
 <r>
  <roomID>ID2</roomID>
 </r>
</rs>

<rooms>
 <room id="ID1">
  <val>200</val>
 </room>
 <room id="ID2">
  <val>100</val>
 </room>
 <room id="ID3">
  <val>200</val>
 </room>
</rooms>

我需要循环浏览rs,并根据r找到具有最高房价值的roomID,这将是此处的第三个r元素( with roomID = ID3)。

如果我这样做:

<xsl:variable name="max1" select="max(//room[@id=//r/roomID]/val)"/>

,我得到200,这是正确的。但有没有办法从这里获得具体的ID?如果我只使用最大值来从room元素中获取ID,我不知道它是否从同一节点返回。像这样:

//room[val=max(//room[@id=//r/roomID]/val)]/@id[1]

2 个答案:

答案 0 :(得分:1)

我认为这有效:

<xsl:value-of select="//r[roomID=//room[val=max(//room[@id=//r/roomID]/val)]/@id]"/>
但是,似乎有点凌乱。

答案 1 :(得分:0)

你的xapth只有一个小错误在选择第一个(...)之前,将表达式括在括号[1]中。 试试:

 (//room[val = max(//room[@id=//r/roomID]/val)]/@id)[1]