我正在使用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
[应用了转换]我要寻找的是其他文件名作为输出文件名。输出数据是正确的。
我尝试过
<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
<xsl:template match="/"><xsl:result-document href="{title}.xml">
创建一个名为.xml
的文件,因为文档节点没有名为title
的子元素,所以{title}
的值为空字符串。 - Martin Honnen<xsl:result-document href="{$filename}.xml">
在 XSLT 2.0 方面是可以的,除非你没有运行 Saxon 或者在你的环境中结果文档被处理方式不同。我对 Apache Camel 没有任何了解,所以无法提供帮助。 - Martin Honnen