Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用XSLT输出多个文件_Java_Xml_Xslt_Saxon - Fatal编程技术网

Java 使用XSLT输出多个文件

Java 使用XSLT输出多个文件,java,xml,xslt,saxon,Java,Xml,Xslt,Saxon,我试图获得一个使用XSLT2.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 Error on line 15 of transform.xml: java.net.URISyntaxException: Illegal chara

我试图获得一个使用XSLT2.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 Error on line 15 of transform.xml: java.net.URISyntaxException: Illegal character in path at index 20: file:///C:/Documents and Settings/Administrator/Desktop/saxon/output1/test1.html at xsl:for-each (file:/C:/Documents%20and%20Settings/Administrator/Desktop/saxon/transform.xml#10) processing /tests/testrun[1] Transformation failed: Run-time errors were reported 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 和设置/Administrator/Desktop/saxon/output1/test1.html 在xsl:for-each(文件:/C:/Documents%20和%20设置/Administrator/Desktop/saxon/transform.xml#10) 处理/测试/测试运行[1] 转换失败:报告了运行时错误 input.xml

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

编辑:我还没有测试过这个功能,因为我手头没有XSLT 2.0处理器,但是在浏览了文档之后,您似乎想要这个功能。以下内容可能适合您:

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

我对saxon-o也有同样的问题:outputfile将空格替换为%20

发现问题在于saxon和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目录

我将其移动到C:\中,这就成功了,谢谢!但是,似乎Saxon开发人员也可以做一些事情来纠正这一点,因为它很好地替换了转换文件路径中的空格。我刚刚尝试了您的更改,我似乎无法让它产生相同的错误。我还在$filename的声明中尝试了它。请注意,我必须删除“fn:”名称空间,因为它说它未声明。我不确定这是否会在注释中正确出现,但我相信您需要将
fn
名称空间声明为
http://www.w3.org/2005/xpath-functions
。更多信息:不,它把它变成了一个URL。从第二个链接获取名称空间。:-)这看起来像是它的主要抄袭者——引用这一点是恰当的。
<?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>
<xsl:result-document href="{fn:encode-for-uri($filename)}" format="html">