보인다. 이 문제를 어떻게 해결할 수 있습니까?
좋은 질문, +1.
수 없습니다. 대신 <xsl:apply-templates>
을 사용할 수 있습니다. 여기
가 빠른 데모입니다 :
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:double="double" xmlns:incr="incr" xmlns:my="my:my"
exclude-result-prefixes="double incr my"
>
<xsl:output method="text"/>
<double:double/>
<incr:incr/>
<xsl:variable name="vFuncDouble"
select="document('')/*/double:*[1]"/>
<xsl:variable name="vFuncIncr"
select="document('')/*/incr:*[1]"/>
<xsl:function name="my:double">
<xsl:param name="arg1" />
<xsl:sequence select="2*$arg1"/>
</xsl:function>
<xsl:function name="my:incr">
<xsl:param name="arg1" />
<xsl:sequence select="1+$arg1"/>
</xsl:function>
<xsl:template name="double" match="double:*">
<xsl:param name="arg1"/>
<xsl:sequence select="my:double($arg1)"/>
</xsl:template>
<xsl:template name="incr" match="incr:*">
<xsl:param name="arg1"/>
<xsl:sequence select="my:incr($arg1)"/>
</xsl:template>
<xsl:function name="my:apply">
<xsl:param name="pFun" as="element()"/>
<xsl:param name="arg1"/>
<xsl:apply-templates select="$pFun">
<xsl:with-param name="arg1" select="$arg1"/>
</xsl:apply-templates>
</xsl:function>
<xsl:template match="/">
<xsl:sequence select="my:apply($vFuncIncr, my:apply($vFuncDouble,2))"/>
</xsl:template>
</xsl:stylesheet>
이러한 변화가 어떤 XML 문서 (사용되지 않음)에 적용, 원하는 결과가 생성됩니다
5
하는 메모를 수행 :
하나는 매개 변수로 전달할 수 있습니다. er (첫 번째 인수)를 my:apply()
"function"으로 변경하고my:apply()
을 두 번째 인수에 적용합니다.
XSLT 1.0과 XSLT 2.0에서이 같은 원리 the FXSL library 구현 높은 주문 기능 (HOFs)를 사용하여 - read more here. 향후 XPath 3.0 기능한다
은
Xpath Data Model (XDM)에서 처음 일류 개체이다.
문제를 해결하기 위해 적용 템플릿 및 템플릿 규칙을 사용해 보셨습니까? call-template 명령은 name 속성에서 xpath 표현식을 허용하지 않으므로 명시 적으로 이름을 설정해야합니다. – riff
xsl : apply-templates를 재발견하려는 것 외에도 XPath 표현식 ancestor :: local-name()은 유효한 XPath 표현식이 아니며 아마도 하나 이상의 이름을 선택한다면, 노드에는 여러 조상이 있기 때문입니다. –