使用saxon将参数传递给样式表

时间:2011-02-04 13:14:16

标签: parameters xslt saxon

  • 我正在使用net.sf.saxon.TransformerFactoryImpl对多个XML文件进行转换。
  • 我正在使用集合函数来获取XML文件。

我想做的是,并且不知道是否可能,是将变量传递给样式表,该样式表包含XML文件所在目录的路径。我想从我的Java代码中传递该变量。

    <xsl:for-each 
        select="for $x in(collection('MYVAR?select=*.xml;recurse=yes'))
                    return saxon:discard-document($x)//testsuites">

2 个答案:

答案 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代码中的

使用方法http://download.oracle.com/javase/6/docs/api/javax/xml/transform/Transformer.html#setParameter%28java.lang.String,%20java.lang.Object%29,例如

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">