0

私はこの(疑似コード)xmlを持っています

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

次に、どの値が「val」ノードにあるかわからないとしましょう。したがって、xhtml出力が必要です

-> 100 未満の「val」がある場合

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

-> 1000 未満で 100 未満ではない "val" がある場合

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

-> 10000 未満で 1000 未満ではない "val" がある場合

<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 に答える