我正在使用Apache Camel file
组件和xslt
组件。我有一条路线,我在那里拾取xml消息,使用xslt进行转换并放到另一个文件夹中。
Apache camel DSL路线:
<route id="normal-route">
<from uri="file:{{inputfilefolder}}?consumer.delay=5000" />
<to uri="xslt:stylesheets/simpletransform.xsl transformerFactoryClass=net.sf.saxon.TransformerFactoryImpl" />
<to uri="file:{{outputfilefolder}}" />
</route>
我也在这里提到Apache camel,检查是否有办法使用Camel设置输出文件名。我想,即使没有Camel,也会有一个纯XSLT的机制。
我需要重命名转换后的输出文件。但是我总是在输出文件夹中获得与转换内容相同的输入文件名。
例如:输入文件:books.xml
输出文件:books.xml
[已应用转换]
我要找的是 someotherfilename.xml 作为输出文件名。输出数据是正确的。
我尝试了<xsl:result-document href="{title}.xml">
,但输出xml是空白的。请帮忙。
输入XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book.child.1>
<title>Charithram</title>
<author>P Sudarsanan</author>
</book.child.1>
<book.child.2>
<title>Java Concurrency</title>
<author>Joshua Bloch</author>
</book.child.2>
</books>
XSLT:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes" />
<xsl:variable name="filename" select="'newfilename'" />
<xsl:template match="/">
<xsl:result-document href="{$filename}.xml">
<traders>
<xsl:for-each select="books/*">
<trade>
<title>
<xsl:value-of select="title" />
</title>
</trade>
</xsl:for-each>
</traders>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
在XSLT中使用<xsl:result-document href=""
时输出XML
它是空白的..
在XSLT中不使用<xsl:result-document href=""
时输出XML
<?xml version="1.0" encoding="UTF-8"?>
<traders xmlns:xs="http://www.w3.org/2001/XMLSchema">
<trade>
<title>Charithram</title>
</trade>
<trade>
<title>Java Concurrency</title>
</trade>
</traders>
编辑:根据MartinHonnen的评论编辑XSLT
答案 0 :(得分:1)
看起来Camel的默认设置是使用相同的文件名,但您可以覆盖它。正如docs提到的那样,您可以按如下方式指定感兴趣的选项:
file:directoryName[?options]
其中一个选项是fileName
:
使用文件语言等表达式动态设置文件名。 对于消费者,它被用作文件名过滤器。对于制作人来说,它是 用于评估要写入的文件名。
简而言之,修改您的路线如下:
<route id="normal-route">
<from uri="file:{{inputfilefolder}}?consumer.delay=5000" />
<to uri="xslt:stylesheets/simpletransform.xsl transformerFactoryClass=net.sf.saxon.TransformerFactoryImpl" />
<to uri="file:{{outputfilefolder}}?fileName=foo.xml" />
</route>
foo.xml
将成为输出文件。
<强>更新强>