将绝对文件路径从java代码传递给xslt document()

时间:2015-05-10 15:55:07

标签: java xml xslt jaxb xslt-1.0

在我的xslt中,我想查找一个xml文件。我需要从java代码传递这个文件的路径。我有以下几点:

...
Transformer transformer = TRANSFORMER_FACTORY.newTransformer();
transformer.setParameter("mypath", "/home/user/repository");

XSLT:

<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="yes"/>

  <xsl:param name="mypath"/>

  ...
  <xsl:template match="connection[@id]">
    <xsl:variable name="lookupStore" select="document('$mypath/myfile.xml')/connections"/>
    <xsl:copy>
      <xsl:apply-templates select="$lookupStore">
        <xsl:with-param name="current" select="."/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

  ...
<xsl:transform>

问题是我想传递一个绝对的“基本”路径到xsl,我想把它与实际的xml文件名(myfile.xml)结合起来。在我看来,document认为文件参数相对于xsl的位置。 此外,我注意到该参数未从java代码中获取。我使用JABX和默认的Xalan XSLT处理器(1.0) 我尝试了很多基于其他SO帖子传递参数的变体,但没有成功。

1 个答案:

答案 0 :(得分:1)

您需要使用完整的文件URL构建一个字符串:document(concat('file://', $mypath, '/myfile.xml'))