0

我有这个(伪代码)xml

<data>
<ref>one</ref>
<val>20</val>
<ref>two</ref>
<val>200</val>
<ref>three</ref>
<val>2000</val>
</data>

然后,假设我不知道“val”节点中有哪些值。因此,我想要 xhtml 输出

-> 如果有任何“val”低于 100

<div class="low">values 20,200,2000 in one,two,three</div>

-> 如果有任何“val”低于 1000 但不低于 100

<div class="medium">values 20,200,2000 in one,two,three</div>

-> 如果有任何“val”低于 10000 但不低于 1000

<div class="high">values 20,200,2000 in one,two,three</div>

*在最后2种情况下,初始值应该不同

任何想法?谢谢 :)

4

1 回答 1

1

要在“1.0”XSLT 版本中获得最大值,我们需要扩展函数。我为你创建了它:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:math="http://exslt.org/math" exclude-result-prefixes="math">

  <xsl:param name="checkValue">
    <xsl:variable name="value" select="math:max(//val)"/>
    <xsl:choose>
      <xsl:when test="$value &lt; 100">
        <xsl:text>low</xsl:text>
      </xsl:when>
      <xsl:when test="$value &lt; 1000 and $value &gt; 100">
        <xsl:text>medium</xsl:text>
      </xsl:when>
      <xsl:when test="$value &lt; 10000 and $value &gt; 1000">
        <xsl:text>high</xsl:text>
      </xsl:when>
    </xsl:choose>
  </xsl:param>

  <xsl:template match="data">
    <div class="{$checkValue}">
      <xsl:text>values </xsl:text>
      <xsl:for-each select="val">
        <xsl:value-of select="."/>
        <xsl:if test="position()!=last()">, </xsl:if>
      </xsl:for-each>
      <xsl:text> in </xsl:text>
      <xsl:for-each select="val">
        <xsl:value-of select="preceding-sibling::ref[1]"/>
        <xsl:if test="position()!=last()">, </xsl:if>
      </xsl:for-each>
    </div>
  </xsl:template>
</xsl:stylesheet>

输出:

<div class="high">values 20, 200, 2000 in one, two, three</div>
于 2013-05-23T05:06:42.233 回答