2017-10-31 10 views
0

매개 변수가있는 함수를 만드는 데 도움이 필요하며 템플릿에 사용할 수 있습니다. 많은 것을 시도했지만 아무것도 효과가 없었습니다.XSLT 1.0에 인수가있는 함수를 생성해야합니다.

<?xml version="1.0" encoding="utf-8"?> 
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 
    version="1.0" 
 
    xmlns:math="http://exslt.org/math" 
 
    xmlns:func="http://exslt.org/functions" 
 
    xmlns:my="http://exslt.org/my" 
 
    exclude-result-prefixes="my" 
 
    extension-element-prefixes="my math func"> 
 
    <xsl:output indent="yes" method="xml" /> 
 

 
    
 
    <xsl:variable name="functionTest11"> 
 
     <xsl:value-of select="my:calXY('aa')" /> 
 
    </xsl:variable> 
 
\t 
 
    <xsl:template match="/"> 
 

 
     <svg xmlns="http://www.w3.org/2000/svg"> 
 
      <xsl:variable name="functionTest22"> 
 
       <xsl:value-of select="my:calXY" /> 
 
      </xsl:variable> 
 
      <xsl:comment>functionTest <xsl:copy-of 
 
       select="$functionTest22" /></xsl:comment> 
 
     </svg> 
 

 
    </xsl:template> 
 
\t 
 
\t <func:function name="my:calXY"> 
 
     <xsl:comment>functionHello </xsl:comment> 
 
     <xsl:param name="string1" select="''"/> 
 
     <func:result> 
 
      <xsl:value-of select="concat(10,'|',10)" /> 
 
     </func:result> 
 
    </func:function> 
 
</xsl:stylesheet>

+0

어떤 XSLT 프로세서를 사용하고 있습니까? EXSLT 스타일의 사용자 정의 함수를 지원한다고 믿을만한 이유가 있습니까? 프로세서에 어떤 오류가 발생합니까? 또는 어떤 결과가 반환됩니까? –

+0

안녕하세요 @ C.M.Sperberg-McQueen 아래 오류가 있습니다. 오류 : '클래스'내 '찾을 수 없습니다.' 치명적인 오류 : '외부 메서드'my.calXY '(공개해야 함)를 찾을 수 없습니다.' ** 변압기 팩토리 오류 javax.xml.transform.TransformerConfigurationException : 외부 메서드 'my.calXY'(공개 여야 함)를 찾을 수 없습니다. –

+0

해당 오류 코드 (및 내가 언급 한 다른 질문에 대한 대답)를 질문에 추가하면 질문에서 대답을 찾을 가능성이 높아집니다. –

답변

0

내가 사용하는 XSLT 프로세서 것으로 보인다 Xalan에,에 (내가 아는) 편리하게 액세스 할 수없는 : 다음 내 샘플 코드입니다. 그래서 나는 당신의 문제의 기원에 대한 어떤 추측도 시험 할 수 없다.

그러나 xsl:param이 올바르다면 xsl:comment과 같은 출력 명령어를 넣으면 놀랄 것입니다. (놀랍게도 스타일 시트 컴파일러의 오류 메시지를보고하지 않는다는 것을 알게되지만, Xalan이 함수를 성공적으로 컴파일하지 못했다는 오류 메시지에서 분명합니다.) 함수를 사용하여 수행하려는 작업이 무엇인지 명확하지 않습니다. 주석 노드와 문자열 값 '10 | 10 '을 모두 반환하지만, 아마도 이것을 수행하는 방법이 아닙니다. xsl:comment 명령은 함수가 실제로 평가되었는지 확인하기위한 시도가 가정에

, 나는이 답변의 이전 버전에서

<func:function name="my:calXY"> 
    <xsl:param name="string1" select="''"/> 
    <func:result select="concat(10,'|',10)" /> 
</ 

같은 것을 [시도 것, 나는 것으로 추측 func:result은 필요하지 않습니다. 내 오류. 필요한 것으로 보입니다.]


완전한 스타일 시트를 요청합니다. 다음 스타일 시트는 xsltproc와 함께 실행될 때 예상대로 작동합니다. (앞서 언급했듯이 Xalan을 실행할 수있는 편리한 방법이 없습니다.)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0" 
    xmlns:func="http://exslt.org/functions" 
    xmlns:my="http://example.org/my" 
    exclude-result-prefixes="my" 
    extension-element-prefixes="func"> 
    <xsl:output indent="yes" method="xml" /> 

    <xsl:template match="/"> 
    <xsl:message>Result is <xsl:value-of select="my:dummy('foo')"/></xsl:message> 
    <output> 
     <test><xsl:value-of select="my:dummy('bar')"/></test> 
     <test><xsl:value-of select="my:dummy('baz')"/></test> 
    </output>  
    </xsl:template> 

    <func:function name="my:dummy"> 
    <xsl:param name="s" select="'foo'"/> 
    <func:result select="concat($s,'|',$s)" /> 
    </func:function> 

</xsl:stylesheet> 
+0

안녕하세요 @ C.M.Sperberg-McQueen xsl : 메소드가 호출되었는지 확인하기위한 주석이 사용되었습니다. func : result가 호출 된 곳의 값을 반환하는 데 사용되었습니다. 이미 공유 한 샘플 함수를 시도했지만 내 의견에서 언급 한 것과 같은 오류가 발생합니다. 가능하다면 그 안에 기능이 있고