XSL - 将Xpath查询外部化到属性文件

时间:2015-12-06 00:41:24

标签: xpath spring-integration xslt-2.0 saxon

关于从外部属性文件中读取属性,我浏览了各种帖子。看起来有一个函数 - getProperty,它可以使用键从属性文件中读取值。我正在使用具有spring集成的saxon解析器。我正在尝试这样的事情,如帖子所述: -

spring上下文件:

   <int-xml:xslt-transformer id="xsltTransformer" input-channel="bulkStringInboundChannel"
    output-channel="toBridgeChannel" result-type="StringResult" **transformer-factory-class="net.sf.saxon.TransformerFactoryImpl"**
    xsl-resource="classpath:/META-INF/spring/integration/intake/intake-flow/bulkTransformer.xsl" />

XSL样式表:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
....
 <xsl:variable name="props" select="document('prop.xml')" />
 <xsl:value-of select="f:getProperty('query1')"/>
....

Prop.xml:

query1 = /Batch/RequestID/text()
  

错误说明:     XPST0003:第30行第23行的 {f:getProperty(&#39; query1&#39;)}中的XPath语法错误:   XTSE0650:没有名为getProperty的模板

我现在有两个问题 - 首先,如何摆脱这些错误?

其次,我可以将xPath查询存储在属性文件中吗?该帖子描述了一种方法,用于读取属性文件并使用与其键相关的值。但是,我认为getProperty只会打印查询的等效文本而不是评估查询并对其进行处理。有没有办法实现这个目标?

发布 - How to read a .properties file inside a .xsl file?

1 个答案:

答案 0 :(得分:0)

我无法帮助你处理问题的Spring方面,但对于Saxon方面,你可以使用如下代码调用JDK方法System.getProperty():

<xsl:value-of select="System:getProperty('user.dir')" xmlns:System="java:java.lang.System"/>

Java可扩展性需要Saxon-PE或更高版本。

如果您读取的属性的值是XPath表达式,则可以使用XSLT 3.0 xsl:evaluate指令执行它 - 这也需要Saxon-PE或更高版本。