2017-03-14 12 views
1

뭔가를 수행하는 사용자 정의 Java 기능이 있으며 선택한 노드에서 수행 할 수 있도록 XSL에 넣어야합니다. I는 다음과 같이 사용되었다 :Java 또는 JS로 <msxsl : script> 요소 사용

<msxsl:script implements-prefix="user" language="java"> 
    <![CDATA[ 
public String doSomething(String input) { 

    // does something 
    return result; 
} 
]]></msxsl:script> 

선언 네임 스페이스 :

... xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:user="example.com"> 

과 전화 :

<xsl:variable name="var"> 
    <xsl:value-of select="user:doSomething(node)"/> 
</xsl:variable> 

이는 "스타일 시트를 컴파일 할 수 없습니다"오류가 발생했습니다.

자바 코드를 자바 스크립트로 바꾸려고 시도했으나 오류가 동일했습니다.

Java 코드를 XSL에 삽입하고 호출하는 방법에 대해 알고 싶으십니까?

+0

URI'urn : schemas-microsoft-com : xslt'과'msxsl '의'ms' 접두사는 이것이 비표준 ** Microsoft * ** 확장 * ** * XSLT 프로세서임을 의미합니다. 비표준이라는 것은 Java와 함께 제공되는 다른 XSLT 프로세서와 함께 사용할 수 없다는 것을 의미합니다. – Andreas

+0

@ Andreas, 귀하의 의견에 감사드립니다! 어쩌면 자바 대안을 아십니까? – alalambda

+1

Xalan은 비슷한 기능을 가지고 있습니다 : https://xml.apache.org/xalan-j/extensions.html – Andreas

답변

1

XSLT에서 Java 또는 Javascript와 같은 다른 언어로 호출하는 메커니즘은 사용중인 XSLT 프로세서에 따라 다르며 일반적으로 프로세서간에 이식 할 수 없습니다. msxsl : 스크립트 메커니즘은 특히 Microsoft의 MSXML 용입니다.

요즘 일반적으로 사용되는 Java 프로세서는 Xalan과 Saxon 뿐이며 Java 코드를 호출하는 메커니즘이 있습니다. 메커니즘은 비슷하지만 많은 세부 사항이 다릅니다. 그러나 Martin Honnen이 지적한 것처럼 XSLT 2.0 (또는 3.0)에서는 1.0보다 확장 함수가 필요하지 않습니다.

+0

답변 해 주셔서 감사합니다. 불행히도 1.0 만 사용할 수 있습니다. Xalan과 함께 Apache XSL-FO 사용하기. – alalambda

+0

18 세의 기술을 사용하는 데 제약이 있기 때문에 사물에 대해별로 나쁘게 생각하지 마십시오. 어떤 사람들은 여전히 ​​COBOL을 사용해야합니다. –