如何在xslt中的同一节点下获得最大值 [英] How to get maximum value under same node in xslt

查看:25
本文介绍了如何在xslt中的同一节点下获得最大值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个像下面这样的xml:

I have a xml like below :

<Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>HourlyReport</Name>
  <Id>8</Id>
  <TotalResults>1</TotalResults>
  <TotalPages>1</TotalPages>
  <Items>
    <Item>
      <Id>1</Id>
      <Hour0>23</Hour0>
      <Hour1>12</Hour1>
      <Hour2>7</Hour2>
      <Hour3>18</Hour3>
      <Hour4>32</Hour4>
      .
      .
      .
      <Hour20>28</Hour20>
      <Hour21>39</Hour21>
      <Hour22>51</Hour22>
      <Hour23>49</Hour23>
    </Item>
  </Items>
</Report>

我需要使用 xslt 从上面的 XML 中获得最大值.在上述情况下,最大值为 51.我怎么能得到那个?也有可能在任何 xslt 变量中获得这个最大值,所以我可以在其他地方使用它.我没有办法.您可以使用任何 xslt 版本 1.0 或 2.0 .

i Need maximum value from above XML using xslt . In above case maximum value is 51. How i can get that? Also is it possible to get this maximum value in any xslt variable, so i can use it some where else. I am not getting any way. You can use any xslt version 1.0 or 2.0 .

推荐答案

鉴于 XSLT 2.0 应该足够使用

Given XSLT 2.0 it should suffice to use

<xsl:variable name="max" select="max(/Report/Items/Item/*[starts-with(local-name(), 'Hour')]/xs:integer(.)"/>

(样式表需要声明 xmlns:xs="http://www.w3.org/2001/XMLSchema").

(where the stylesheet would need to declare xmlns:xs="http://www.w3.org/2001/XMLSchema").

使用 XSLT 1.0 我会简单地排序并取最大值

And with XSLT 1.0 I would simply sort and take the maximum value as in

<xsl:variable name="max">
  <xsl:for-each select="/Report/Items/Item/*[starts-with(local-name(), 'Hour')]">
    <xsl:sort select="." data-type="number" order="descending"/>
    <xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
  </xsl:for-each>
</xsl:variable>

这篇关于如何在xslt中的同一节点下获得最大值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆