Batch file Saxon:result-document()函数失败,没有错误消息
我正在从批处理文件调用Saxon(9.6 HE):Batch file Saxon:result-document()函数失败,没有错误消息,batch-file,xslt,saxon,Batch File,Xslt,Saxon,我正在从批处理文件调用Saxon(9.6 HE): Transform -t -s:"in.xml" -xsl:"ChangeFileName.xsl" -o:"changefilename.txt" 1>>convert.log 2>&1 命令1>>convert.log 2>&1将Saxon的标准错误输出发送到文件convert.log Transform调用输出2个文本文件的XSLT: <xsl:template match="manual">
Transform -t -s:"in.xml" -xsl:"ChangeFileName.xsl" -o:"changefilename.txt" 1>>convert.log 2>&1
命令1>>convert.log 2>&1
将Saxon的标准错误输出发送到文件convert.log
Transform调用输出2个文本文件的XSLT:
<xsl:template match="manual">
<xsl:result-document method="text" href="version.txt">
<xsl:text> </xsl:text><xsl:value-of select="/manual/bookVariables/Variable[@Name='USR_Manual_Version']/@Value"/><xsl:text> </xsl:text>
</xsl:result-document>
<xsl:result-document method="text" href="state.txt">
<xsl:text> </xsl:text><xsl:value-of select="/manual/bookVariables/Variable[@Name='USR_Manual_State']/@Value"/>
</xsl:result-document>
</xsl:template>
没有写操作失败或失败原因的指示
更糟糕的是,当我直接从命令行窗口运行Transform命令时,它成功了
如何从Saxon获得更详细的错误信息?很棘手。您不太可能从Saxon获得更多信息,因为Saxon可能不知道这些文件尚未成功编写。通常情况下,像这样的问题,文件实际上是存在的,但它们并不是您所期望的 一个建议:尝试使用-T选项运行。生成的跟踪应该告诉您转换是运行到(显然成功)完成,还是在某个阶段过早中断 另一个建议是:尝试使用绝对URI(例如。file:///x/y/z.txt)在href属性中
我已经忘记了我曾经知道的关于Windows文件系统的大部分内容,但是有没有可能在出现故障的帐户下,驱动器号Z被映射到意外的地方?因此XSLT尝试创建两个文本文件,而日志(由
-t
选项生成的输出,如“Writing to…”只会显示“写入文件:/Z:/version.txt”而不是“写入文件:/Z:/state.txt”?并且这两个文件都没有创建?是否有任何安全设置阻止“写入文件不同”“从写入设备上文件的帐户Z:
?日志中有两个文件的条目。用户具有Z的写入权限:驱动器号可能是问题所在;我将对此进行研究。我发现了一个不匹配:批处理文件是从UNC路径调用的,而XSLT转换尝试写入驱动器号Z:当我用驱动器号替换UNC路径时,文件被正确写入。我将做更多的测试,看看是否可以让它与UNC路径一起工作。UNC路径到URI的映射是出了名的易变(它定义得很糟糕,我认为Java不会总是给出与.NET相同的结果)。请记住,XSLT处理URI。
Writing to file:/Z:/version.txt