我正在尝试获取一个示例,该示例使用XSLT 2.0来输出工作中的多个文件。
在Java 1.6上使用Saxon B 9.7.0.1,出现此错误:
C:\ Documents and Settings \ Administrator \ Desktop \ saxon> java -jar saxon9.jar -s:input.xml -xsl:transform.xml transform.xml第15行出现错误: java.net.URISyntaxException:索引20处路径中的非法字符:file:/// C:/ Documents 和设置/管理员/桌面/saxon/output1/test1.html 在xsl:for-each(文件:/ C:/Documents%20and%20Settings/Administrator/Desktop/saxon/transform.xml#10) 处理/ tests / testrun [1] 转换失败:报告了运行时错误
<?xml version="1.0" encoding="UTF-8"?> <tests> <testrun run="test1"> <test name="foo" pass="true" /> <test name="bar" pass="true" /> <test name="baz" pass="true" /> </testrun> <testrun run="test2"> <test name="foo" pass="true" /> <test name="bar" pass="false" /> <test name="baz" pass="false" /> </testrun> <testrun run="test3"> <test name="foo" pass="false" /> <test name="bar" pass="true" /> <test name="baz" pass="false" /> </testrun> </tests>
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="text"/> <xsl:output method="html" indent="yes" name="html"/> <xsl:template match="/"> <xsl:for-each select="//testrun"> <xsl:variable name="filename" select="concat('output1/',@run,'.html')" /> <xsl:value-of select="$filename" /> <!-- Creating --> <xsl:result-document href="{$filename}" format="html"> <html><body> <xsl:value-of select="@run"/> </body></html> </xsl:result-document> </xsl:for-each> </xsl:template> </xsl:stylesheet>
URI中的字符20是“文档和设置”中的第一个空格。作为快速解决方案,请尝试将文件移动到没有空格的路径。(例如,“ C:\ test”或类似的代码。)我怀疑长期的解决方法是将XSLT更改为%20在馈$filename给之前将空格编码为xsl:result- document,但我担心XSLT-2.0-fu不够坚固告诉你如何
%20
$filename
xsl:result- document
编辑: 我还没有测试过,因为我没有方便的XSLT 2.0处理器,但是看了看文档之后,看来您想要的是uri编码。类似以下内容可能适用于您:
<xsl:result-document href="{fn:encode-for-uri($filename)}" format="html">