2011-02-04 147 views
3
  • 我正在使用net.sf.saxon.TransformerFactoryImpl对多个XML文件进行一些转换。
  • 我正在使用收集功能来获取XML文件。

我想做什么,不知道是否可能,是将一个变量传递给包含我的XML文件所在目录路径的样式表。我想从我的Java代码中传递该变量。将参数传递给样式表使用saxon

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

回答

2

只需使用

<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"); 
+0

我认为你没有得到我。我问的是如何使用Java代码 – Theo 2011-02-04 13:35:22

+0

将URL放在$ MYVAR中,这是行不通的。我得到 xslGetDataToXmlJUnit.xsl的第9行错误: FODC0004:文件或目录文件:/ Users/admin/Documents/$ MYVAR不存在 – Theo 2011-02-04 14:39:57

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