XSLT如何根据不同节点的值创建输出

时间:2013-05-23 00:20:01

标签: xml xslt xhtml

我有这个(伪代码)xml

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

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

- &GT;如果有任何“val”低于100

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

- &GT;如果有任何“val”低于1000但不低于100

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

- &GT;如果有任何“val”低于10000但不低于1000

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

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

有什么想法吗?谢谢:))

1 个答案:

答案 0 :(得分: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>