2012-11-09 59 views
3

我只是想变换输入文档(它只是一个文件引用列表)的几个输出文档。转换输出非XML文档

工作的:

<p:xslt name="MainTransformation1-b"> 
     <p:input port="source"> 
      <p:pipe step="CI" port="result"/> 
     </p:input> 
     <p:input port="stylesheet"> 
      <p:document href="Transform.xsl"/> 
     </p:input> 
     <p:with-param name="ProjectName" select="$Name"/> 
    </p:xslt> 

    <p:sink/> 

    <p:for-each> 
     <p:iteration-source> 
      <p:pipe step="MainTransformation1-b" port="secondary"/> 
     </p:iteration-source> 
     <p:store method="text" media-type="text/text"> 
      <p:with-option name="href" select="p:base-uri()"/> 
     </p:store> 
    </p:for-each> 

XSL:

<xsl:template match="/"> 
    <xsl:for-each select="//p"> 
     <xsl:result-document href="{'tmp', position(), '.xml'}"> 
      <xsl:apply-templates/> 
     </xsl:result-document> 
    </xsl:for-each> 
</xsl:template> 

问题:输出文件不包含根元素 - 我需要输出帧和以后的过程中框架文件已创建并包含所有输出文档。

错误消息:

2012年9月11日13时06分27秒com.xmlcalabash.util.DefaultXProcMessageListener错误 SCHWERWIEGEND:ERR:XD0001:XD0001 2012年9月11日13时06分27秒com.xmlcalabash.drivers。主要误差 SCHWERWIEGEND:如果非XML资源上产生一个输出步骤或到达上一步骤输入它是一个动态错误。

当然,它不是XML - 我试图代表@method(method = text)修复它,但它没有奏效。

任何想法?我搜索适用的解决方案,但我只发现的p条目说,目前这是不可能的......希望不是

回答

3

输入:商店必须是XML。总结你的包装元素的变换文本输出,并申请方法=上的文字,包装元素将被自动忽略,所以你会得到你text/plain的文件..

HTH!

+0

对不起,再次询问 - 但我刚添加的​​前的for-each循环 - 但它仍然不工作。 – Oliver

+1

@oliver,在你的xslt里面加上包装,这应该会改善事情.. – grtjn

+0

@grtijn我遇到了同样的问题。我的XSLT输出使用输出纯文本。在XProc中,我调用来执行该XSLT,但发生错误:“p:xslt返回了非XML结果”。有什么方法可以解决它吗?我不想包装XSLT中的根元素,因为我想保持XSLT干净。输出纯文本的XSLT是我在XSLT中的最后一步。 – chansey