4
  • 我正在使用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">
4

2 回答 2

4

只需使用

<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");
于 2011-02-04T13:31:41.310 回答
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">
于 2011-02-04T14:08:40.900 回答