首页 > 解决方案 > xslt:函数中不存在上下文项

问题描述

我的 xml 池就像

<POOL>
  <CUSTOMER>
    <GROUP_ID>
      2
    </GROUP_ID>
  </CUSTOMER>
</POOL>

我要调用我的函数,看起来像

<xsl:value-of select="nck:serviceNo(' ',' ')"/>

我的功能是:

<xsl:function name="nck:serviceNo" as="xs:string">
    <xsl:param name="spacer1" as="xs:string"/>
    <xsl:param name="spacer2" as="xs:string"/>
    <xsl:variable name="num">
      1010<xsl:value-of select="$spacer1" />2020 3030<xsl:value-of select="$spacer2" />
      <xsl:choose>
        <xsl:when test="/POOL/CUSTOMER/GROUP_ID = 2" >
          10
        </xsl:when>
        <xsl:otherwise>
          0
        </xsl:otherwise>
      </xsl:choose> 
    </xsl:variable> 
    <xsl:sequence select="$num"/>
  </xsl:function>

我的错误是:

在 xsl 的表达式中的字符 1 处键入错误:test.xsl 的第 31 行第 60 列上的 when/@test:XPDY0002 前导 '/' 不选择任何内容:上下文项不存在 在样式表编译期间报告了错误

我需要一个工作区来在函数中提供池,任何人都可以帮忙

标签: xsltsaxon

解决方案


添加一个参数以传入一个节点,例如<xsl:param name="group-id"/>并传入例如<xsl:value-of select="nck:serviceNo(' ',' ', /POOL/CUSTOMER/GROUP_ID)"/>,然后您在其中 ckeck<xsl:when test="$group-id = 2">或声明一个全局参数或变量,例如<xsl:param name="main-root" select="/"/>并使用 eg <xsl:when test="$main-root/POOL/CUSTOMER/GROUP_ID = 2">


推荐阅读