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

The*_*heo 5 xslt parameters 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">
Run Code Online (Sandbox Code Playgroud)

Mar*_*nen 4

只需使用

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

请注意,MYVAR 应该是文件 URL,而不是(取决于平台)目录路径。

[编辑] 在你的 XSLT 中你需要

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">

  <xsl:param name="MYVAR"/>

  ...

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

在您的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");
Run Code Online (Sandbox Code Playgroud)