net.sf.saxon.TransformerFactoryImpl
对多个XML文件进行转换。我想做的是,并且不知道是否可能,是将变量传递给样式表,该样式表包含XML文件所在目录的路径。我想从我的Java代码中传递该变量。
<xsl:for-each
select="for $x in(collection('MYVAR?select=*.xml;recurse=yes'))
return saxon:discard-document($x)//testsuites">
答案 0 :(得分:3)
只需使用
<xsl:for-each select="for $x in(collection(concat($MYVAR, '?select=*.xml;recurse=yes')))return saxon:discard-document($x)//testsuites">
请注意,MYVAR应该是文件URL,而不是(平台相关的)目录路径。
[编辑] 在您的XSLT中,您需要
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:param name="MYVAR"/>
...
</xsl:stylesheet>
您的Java代码中的
transformer.setParameter("MYVAR", "file:///C:/dir/subdir/dir");
答案 1 :(得分:0)
在样式表中使用参数:
<xsl:param name="MYVAR" />
在调用转换之前,像这样在Java中设置参数:
transformer.setParameter("MYVAR", 'file:/some/folder');
像在任何变量或参数中一样引用样式表中的参数:
<xsl:for-each select="for $x in
(collection(concat($MYVAR, '?select=*.xml;recurse=yes')))
return saxon:discard-document($x)//testsuites">