小编典典

使用XSLT输出多个文件

java

我正在尝试获取一个示例,该示例使用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]
转换失败:报告了运行时错误

input.xml

<?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>

transform.xml

<?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>

阅读 284

收藏
2020-11-26

共1个答案

小编典典

URI中的字符20是“文档和设置”中的第一个空格。作为快速解决方案,请尝试将文件移动到没有空格的路径。(例如,“ C:\
test”或类似的代码。)我怀疑长期的解决方法是将XSLT更改为%20在馈$filename给之前将空格编码为xsl:result- document,但我担心XSLT-2.0-fu不够坚固告诉你如何

编辑: 我还没有测试过,因为我没有方便的XSLT
2.0处理器,但是看了看文档之后,看来您想要的是uri编码。类似以下内容可能适用于您:

<xsl:result-document href="{fn:encode-for-uri($filename)}" format="html">
2020-11-26