EXSLT 라이브러리를 사용하여 XSLT 1.0에 함수를 작성하고 싶습니다. 여기 내 스타일 시트가있다.너무 많은 인수로 함수를 호출했습니다.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:func="http://exslt.org/functions"
xmlns:my="http://www.example.com/">
<xsl:output method="text" encoding="UTF-8"/>
<func:function name="my:test">
<xsl:param name="param1" />
<xsl:param name="param2" />
<func:result select="concat($param1, $param2)" />
</func:function>
<xsl:template match="/">
<xsl:value-of select="my:test('test1', 'test2')" />
</xsl:template>
</xsl:stylesheet>
불행하게도 나는 xsltproc
나는 다음과 같은 오류가 발생하고 그것을 실행하려고 할 때.
{ http://www.example.com/ }test: called with too many arguments xmlXPathCompiledEval: 1 objects left on the stack. runtime error: file exslt_function_test.xsl line 16 element value-of XPath evaluation returned no result.
아무런 오류가 보이지 않습니다. 이 함수는 정확히 두 개의 매개 변수로 정의되고 호출됩니다. 과거에 비슷한 문제가있는 사람이 있습니까?
불필요한 주석을 없애려면 ... 아니요, XSLT 2.0을 사용할 수 없습니다.
그게 전부입니다. 감사! – Jagger
XSLT 1.0은 매우 간결하게 작성된 스펙으로, "요소"와 "명령어"라는 용어의 차이점 중 하나는 미묘한 부분을 놓치기 쉽습니다. "확장 요소"의 정의를주의 깊게 읽으면 명령 만 확장 요소가 될 수 있으며 선언은 될 수 없다는 것이 분명합니다. 벤더 특정 선언에는 확장 요소 접두어가 필요하지 않습니다. 그러나 당신은 그 결론에 도달하기 위해 정말로 신중하게 읽어야합니다. –