문제

나는 어리석은 것처럼 보이는 문제에 갇혀 있지만 해결책을 찾을 수는 없습니다 ... XLST를 사용하면 템플릿으로 계산 된 값 목록을 요약해야합니다. 그래서이 값을 트리 구조에 저장했습니다 (루트 요소 "숫자"에 포함 된 "숫자"요소 목록). 그러나이 자체 제작 목록으로 내가 무엇을하려고하는지, 그것은 0, 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에 대해 더 구체적이기가 어렵습니다.

제 경우에는 정확히 같은 문제가있었습니다. 합 ($ atome/element) 반품 0과 합 ($ 뭐/*) 올바른 값을 반환했습니다.

내 문제는 다음 UBL 송장 스타일 시트 선언으로 인해 발생했습니다.

XMLNS = "URN : OASIS : 이름 : 사양 : ubl : schema : xsd : invoice-2"

이 라인을 제거한 후 합 ($ atome/element) 올바른 값을 반환했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top