Передача параметра в таблицу стилей с помощью saxon - PullRequest
4 голосов
/ 04 февраля 2011
  • Я использую 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 ]

3 голосов
/ 04 февраля 2011

Просто используйте

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

Обратите внимание, что MYVAR должен быть URL-адресом файла, а не (каталог-зависимым) путем к каталогу.

[edit] В вашем 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 голосов
/ 04 февраля 2011

Используйте параметр в вашей таблице стилей:

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