我坚持这似乎是一个愚蠢的问题,但我不能找出解决方案......随着XLST,我需要总结的模板计算值的列表。所以,我存储这些值以树结构(包含在根元素“号码”,“号码”元素的列表)。但无论我尝试用这种自制的名单做,它会返回要么什么都没有,0或错误...

是否有人知道我在做什么错了?

<!-- create the tree fragment -->
<xsl:variable name="_subTotals">
    <Numbers>
        <xsl:for-each select="List">
            <xsl:variable name="_Size">
                <xsl:call-template name="GetSize">
                    <xsl:with-param name="_value" select="@value"/>
                </xsl:call-template>
            </xsl:variable>
            <Number>
                <xsl:value-of select="$_Size"/>
            </Number>
        </xsl:for-each>
    </Numbers>
</xsl:variable>

<!-- this returns an error: expression must result into a node-set -->
<xsl:message terminate="no">
    <xsl:value-of select="sum($_subTotals/Numbers/Number)"/>
</xsl:message>

<!-- transform the tree fragment into a node-set
<xsl:variable name="_Total" select="msxsl:node-set($_subTotals)"/>

<!-- returns nothing -->
<xsl:for-each select="$_Total/Numbers/Number">
    <xsl:message terminate="no">
        <xsl:value-of select="@value"/>
    </xsl:message>
</xsl:for-each>

<!-- returns 0 -->
<xsl:value-of select="sum($_Total/Numbers/Number)"/>
有帮助吗?

解决方案

这里是一个快速的方式如何总结动态生成的值(也许你正在呼吁没有产生预期的结果吗?如果是这样,你必须问一个问题,并同时提供了代码模板,在其上的代码操作XML文档没有这些没有人可以帮助和猜测是没有用的):

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common"
 >
 <xsl:output method="text"/>

    <xsl:template match="/">
      <xsl:variable name="vrtfNums">
         <nums>
           <num>1</num>
           <num>2</num>
         </nums>
      </xsl:variable>

      <xsl:variable name="vNums" select="ext:node-set($vrtfNums)"/>

      <xsl:value-of select="sum($vNums/*/*)"/>
    </xsl:template>
</xsl:stylesheet>

:当上述变换上任何XML文档(忽略)施加时,所需的结果是产生

3

其他提示

递归是在功能的语言通常的回答。是这样的:

<xsl:template name='totalRest>
  <xsl:variable nane='sub'>
    <!-- Use for-each to set local new context node -->
    <xsl:for-each select='following::List[1]'>
      <xsl:call-template name='totalRest'/>
    </xsl:for-each>
  </xsl:variable>
  <xsl:variable name='this'>
    <xsl:call-template name="GetSize">
      <xsl:with-param name="_value" select="@value"/>
    </xsl:call-template>
  </xsl:variable>

  <xsl:value-of select='$sub+$this' />

</xsl:template>

不知道更多的getSize和输入文档很难更具体地约权XPath来设置上下文节点的递归调用。

在我来说,我不得不正是总和($东西/元)同样的问题返回0和总和($东西/ *)返回正确的值。

我的问题通过以下的UBL发票样式表声明引起的:

的xmlns = “瓮:绿洲:名称:规格:UBL:模式:XSD:发票-2”

去除该行之后,的总和($东西/元件)返回的正确的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top