+ -
当前位置:首页 → 问答吧 → 非常无助地求解。。。这是为什么啊。怎么老是有错误

非常无助地求解。。。这是为什么啊。怎么老是有错误

时间:2011-03-31

来源:互联网

已知:SML文件,写xslt 和DTD,就是实现一个求和的功能。。。 请高人帮帮忙 程序总是不对!!!~~~~(>_<)

DTD:
<!ELEMENT numbers (num+)
<!ELEMENT num (#PCDATA)>


xml文件:
<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE numbers SYSTEM "sum.dtd">

<numbers>
  <val>
  <num>18</num>
  <num>1</num>
  <num>3</num>
  <num>5</num>
  <num>23</num>
  <num>3</num>
  <num>2</num>
  <num>7</num>
  <num>4</num>
  </val>
</numbers>

我的XSLT:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:transform version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xsl:output method="text" encoding="UTF-8"/>

  <xsl:template match="/">
  <xsl:apply-templates/>
  <xsl:text>&#10;</xsl:text>
  </xsl:template>

  <xsl:template match="numbers" >
  <xsl:call-template name="sum">
  <xsl:with-param name="nums" select="num" as="element(num)*"/>
  </xsl:call-template>
  </xsl:template>

  <xsl:template name="sum" as="xs:integer($num//@val)">
  <xsl:param name="nums" as="element(num)*"/>
  <xsl:choose>
  <xsl:when test="empty($nums)">
  <xsl:sequence select="0"/>
  </xsl:when>
  <xsl:otherwise>
  <xsl:variable name="rem" as="xs:integer">
  <xsl:call-template name="sum">
  <xsl:with-param name="nums" select="$nums[position()>1]"
  as="element(num)*"/>
  </xsl:call-template>
  </xsl:variable>
  <xsl:sequence select="xs:integer($nums[1]/text())+ $rem"/>
  </xsl:otherwise>
  </xsl:choose>
  </xsl:template>

</xsl:transform>

作者: cqq8638   发布时间: 2011-03-31

帮顶。

作者: haa17   发布时间: 2011-03-31