如何在XSLT中包含对JavaScript的调用?
我试图在XSLT内部调用JavaScript,但一直失败。我正在使用Xalan名称空间。我也在调用Java,这没有问题,但由于某些原因JavaScript没有如何在XSLT中包含对JavaScript的调用?,javascript,xslt,xalan,Javascript,Xslt,Xalan,我试图在XSLT内部调用JavaScript,但一直失败。我正在使用Xalan名称空间。我也在调用Java,这没有问题,但由于某些原因JavaScript没有 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/jav
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java" xmlns:xalan="http://xml.apache.org/xalan" xmlns:counter="MyCounter" extension-element-prefixes="counter">
<xsl:template match="/">
<xalan:component prefix="counter" functions="response">
<xalan:script lang="javascript">
function response(name) {
// Return a string.
return "" + (name);
}
</xalan:script>
</xalan:component>
<xsl:value-of select="counter:response('hello')"/>
<xsl:variable name="rightNow" select="java:java.util.Date.new()"/><!-- Get date object -->
<xsl:variable name="formatter" select="java:java.text.SimpleDateFormat.new('MM')"/> <!-- double digit format: append 0 to less than ten -->
<xsl:variable name="formattedMonth" select="java:format($formatter, $rightNow)"/> <!-- format it -->
<p><xsl:value-of select="$formattedMonth"/></p>
</xsl:template>
</xsl:stylesheet>
函数响应(名称){
//返回一个字符串。
返回“”+(名称);
}
我在XML转换器中遇到以下错误:
<Location of error unknown>java.lang.NoSuchMethodException: For extension function, could not find method java.lang.String.response<ExpressionContext, ]>.
java.lang.NoSuchMethodException:对于扩展函数,找不到方法java.lang.String.response。
functions=“response”
添加到xalan:component
。(适当,但似乎并非严格必要,至少在这种情况下是如此。)xalan:component
移出xsl:template
。(关键。这可能就是问题所在。)<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:java="http://xml.apache.org/xalan/java"
xmlns:xalan="http://xml.apache.org/xalan"
xmlns:counter="MyCounter"
extension-element-prefixes="counter">
<xalan:component prefix="counter" functions="response">
<xalan:script lang="javascript">
function response(name) {
// Return a string.
return "" + (name);
}
</xalan:script>
</xalan:component>
<xsl:template match="/">
<xsl:value-of select="counter:response('hello')"/>
<xsl:variable name="rightNow" select="java:java.util.Date.new()"/><!-- Get date object -->
<xsl:variable name="formatter" select="java:java.text.SimpleDateFormat.new('MM')"/> <!-- double digit format: append 0 to less than ten -->
<xsl:variable name="formattedMonth" select="java:format($formatter, $rightNow)"/> <!-- format it -->
<p><xsl:value-of select="$formattedMonth"/></p>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>hello<p xmlns:xalan="http://xml.apache.org/xalan" xmlns:java="http://xml.apache.org/xalan/java">09</p>
函数响应(名称){
//返回一个字符串。
返回“”+(名称);
}
按预期产生以下输出:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:java="http://xml.apache.org/xalan/java"
xmlns:xalan="http://xml.apache.org/xalan"
xmlns:counter="MyCounter"
extension-element-prefixes="counter">
<xalan:component prefix="counter" functions="response">
<xalan:script lang="javascript">
function response(name) {
// Return a string.
return "" + (name);
}
</xalan:script>
</xalan:component>
<xsl:template match="/">
<xsl:value-of select="counter:response('hello')"/>
<xsl:variable name="rightNow" select="java:java.util.Date.new()"/><!-- Get date object -->
<xsl:variable name="formatter" select="java:java.text.SimpleDateFormat.new('MM')"/> <!-- double digit format: append 0 to less than ten -->
<xsl:variable name="formattedMonth" select="java:format($formatter, $rightNow)"/> <!-- format it -->
<p><xsl:value-of select="$formattedMonth"/></p>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>hello<p xmlns:xalan="http://xml.apache.org/xalan" xmlns:java="http://xml.apache.org/xalan/java">09</p>
hello09
我认为脚本标签就足够了,它可能不需要xalan
前缀
在xalan:component
元素中是否应该有functions=“response”
?您好,感谢您的回答。一个无关的问题,什么是MyCounter,为什么在名称空间中声明它?这来自xalan示例XSLT扩展机制正在利用XML名称空间机制。”MyCounter’可能是这里给出的JavaScript扩展示例中的遗留问题:您可能希望将其和‘counter’前缀重命名为更适合您的应用程序的名称,但至少您有可以启动的工作代码。