1

我正在尝试获取一个使用 XSLT 2.0 输出多个工作文件的示例。

将 Saxon B 9.7.0.1 与 Java 1.6 一起使用,我收到此错误:

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
  和 Settings/Administrator/Desktop/saxon/output1/test1.html
  在 xsl:for-each (file:/C:/Documents%20and%20Settings/Administrator/Desktop/saxon/transform.xml#10)
     处理 /tests/testrun[1]
转换失败:报告了运行时错误

输入.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>

转换.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>
4

2 回答 2

1

URI 中的第 20 个字符是“文档和设置”中的第一个空格。作为快速修复,请尝试将文件移动到没有空格的路径。(比如说,“C:\test”或类似的东西。)我怀疑长期的解决方法是%20在喂给 之前将$filename你的 XSLT 编码为空格xsl:result-document,但我担心我的 XSLT-2.0-fu 不够强大告诉你怎么做。

编辑:我没有对此进行测试,因为我手边没有 XSLT 2.0 处理器,但是在浏览了文档之后,看起来你想要encode-for-uri函数。以下内容可能对您有用:

<xsl:result-document href="{fn:encode-for-uri($filename)}" format="html">
于 2009-07-13T21:16:59.293 回答
1

我对 saxon -o 有同样的问题:输出文件用 %20 替换空格。

发现问题是撒克逊和java版本。

Linux JAVA 1.7.0_45:Saxon 创建 %20 Unix JAVA 1.5.0_61:SAXON 创建 %20 Unix JAVA 1.4.2_22:SAXON 不创建 %20 目录

于 2015-11-10T14:50:48.250 回答