【问题标题】:load external property file from classpath从类路径加载外部属性文件
【发布时间】:2014-10-28 08:17:45
【问题描述】:

我有一个 maven 项目并且有以下文件:

mapping.xml file in /src/main/resource/xml

我在 /src/main/resource/xsl/foo.xsl 中定义了一个 XSLT 文件

在 foo.xsl 中,我有以下 sn-p:

<xsl:variable name="props" select="document('mapping.xml')"/>

我正在努力解决文档函数如何引用 mapping.xml。如果我将 mapping.xml 移动到项目的根目录,我只能让它工作。

如果 mapping.xml 在 /src/main/resource/xsl 中,那么 XSLT 将看不到它。

如何让 XSLT 查看类路径或相对路径?

这是使用 XSLT 1.0。

【问题讨论】:

标签: xml xslt


【解决方案1】:

试试:

<xsl:variable name="props" select="document('../xml/mapping.xml')" />

【讨论】:

  • 那行不通。默认情况下,文档函数引用项目的基础。因此,通过执行 ../xml/mapping.xml,它会下降一个级别。必须有一种方法可以将其配置为查看项目的类路径或 XSL 所在位置的相对路径。
  • @CharlieLee 它确实对我有用。我不确定“项目的基础”或“项目的类路径”在 XSLT 的上下文中是什么意思。这里没有“项目”; document() 函数使用样式表的位置作为基础解析相对 URI(除非另有说明 - 请参阅:w3.org/TR/xslt/#document)。所以它实际上是从xsl 文件夹到resource 文件夹,然后从那里到xml 文件夹和其中的mapping.xml 文件。
  • 在 Maven 项目中工作。所以有一个明确的结构。 IE。 src/main/resource、src/main/java,位于项目的根目录中。 XSL 文件位于 src/main/resource 目录中。因此,项目类路径是 src/main/resource,这是 maven 项目的结构。由于某种原因,XSLt 文档 () 引用了项目的根目录,在本例中为 foo-project。它需要指向 /foo-project/src/main/resource。
  • XSLT 文件不“知道”任何这些。我不知道您为什么认为它“引用了项目的根目录”。但是,我看到现在您说“XSL 文件位于 src/main/resource 目录中”。那不是您在原始问题中所说的,所以也许这就是它对您不起作用的原因。
  • 注意:如果是真的,并且当您使用 document('mapping.xml') 时,您的 XSLT 确实找到了位于另一个目录(而不是 XSLT 本身所在的目录)中的文档,那么您有不合规行为。也许这是 Maven 工具的一个特性,但您的问题与 XSLT 无关。
猜你喜欢
  • 2014-12-16
  • 2019-03-04
  • 1970-01-01
  • 2016-04-03
  • 2018-12-19
  • 2015-08-21
  • 2012-08-15
  • 2020-06-05
  • 2014-12-30
相关资源
最近更新 更多