我正在我的java Web应用程序中执行XSLT转换,没有任何问题,如下所示:
Transformer transformer = TransformerFactory.newInstance().newTransformer(xslSource);
transformer.transform(xmlInput, xmlOutput);
Run Code Online (Sandbox Code Playgroud)
在我的XSLT转换中,我现在正在添加对document()函数的调用以从RESTful Web服务加载响应:
<!-- do stuff -->
<xsl:variable name="url">
http://server/service?id=<xsl:value-of select="@id"/>
</xsl:variable>
<xsl:call-template name="doMoreStuff">
<xsl:with-param name="param1" select="document($url)/foo"/>
</xsl:call-template>
Run Code Online (Sandbox Code Playgroud)
好酷,没问题.但现在,我想从java中的utils类中读取基本URL并将其传递给样式表.
//java
String baseUrl = myUtils.getBaseUrl();
<!-- xslt -->
<xsl:variable name="url">
<xsl:value-of select="$baseUrl"/>
<xsl:text>/service?id=</xsl:text>
<xsl:value-of select="@id"/>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)
有关如何做到这一点的任何建议?我的Java utils类从类路径上的myApp.properties文件加载值,但我不确定我是否可以从XSLT中使用它...
xsl:param在样式表中声明一个,以便baseUrl可以在调用时传递值:
<xsl:param name="baseUrl" />
Run Code Online (Sandbox Code Playgroud)
在Transformer对象上设置参数:
Transformer transformer = TransformerFactory.newInstance().newTransformer(xslSource);
transformer.setParameter('baseUrl', myUtils.getBaseUrl());
transformer.transform(xmlInput, xmlOutput);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是XSLT 2.0,那么resolve-uri()在构造url变量值时可以考虑使用该函数:
<xsl:variable name="url"
select="resolve-uri(concat('/service?id=', @id), $baseUrl)" />
Run Code Online (Sandbox Code Playgroud)
resolve-uri()可以帮助补偿尾部斜杠,主题标签和其他内容,baseUrl否则可能会通过简单地$baseUrl将片段与片段连接来构造无效的URL@id.
setParameter使用参数的名称和值调用Transformer实例.然后在您的XSLT文档中声明参数using <xsl:param name="yourParamName" />,然后您可以在XSLT中使用它,例如:<xsl:value-of select="$yourParamName" />
| 归档时间: |
|
| 查看次数: |
12102 次 |
| 最近记录: |