4

我一直在尝试找出一种使用 xslt 批量转换目录中文件的方法。我尝试了 xml 扳手和其他一些软件,但我需要将所有这些放在我可以根据需要运行的脚本或批处理中。

我从使用 raptorxml 命令行的批处理文件开始,如下所示:

C:\Program Files (x86)\Altova\RaptorXMLServer2013\bin>RaptorXML.exe xslt --input=c:\data\test1.xml --output=c:\data\output1.xml c:\data\test.xsl

file:///c:/data/test1.xml: result="OK" xslt-output-files="file:///c:/data/output1.xml"

当我尝试将其放入如下批处理文件时,我无法理解正在发生的事情 - 无法确定脚本是否运行或是否有任何错误.. 尝试将 ECHO 放在两者之间,但这没有帮助任何一个。我尝试使用 >log.log 将输出重定向到日志,但这只会得到文件中每一行的回显。我看不到变量的值或对 raptorxml 的调用是如何进行的形成。任何提示或指示都会有所帮助 - 谢谢。

这是我的批处理文件:我将其运行为batchxform.bat C:\data\ip

cls
call :treeProcess
goto :eof

:treeProcess
cd %1
for %%f in (*.xml) do (
RaptorXML.exe xslt --input=%%f --output=c:\data\op\%%~nf.xml c:\data\test.xsl
)

for /D %%d in (%1) do (
   cd %%d
   call :treeProcess
   cd ..
)

exit /b

在最初的回答/发布之后,我添加了更多逻辑来从另一个调用脚本来处理来自输入目录的所有子目录的文件。想在这里分享那个脚本:

ECHO OFF
set _xform=C:\Users\gkalra\Documents\work\Annotation\code\batchxform.cmd
rem call _xform %1
FOR /R %1 %%G in (.) DO (
 Pushd %%G
 Echo now in %%G
 rem dir /b "%%G/*.xml"
 call "%_xform%" %%G
 Popd 
)
Echo "back home"
4

1 回答 1

4

另存为 batchxform.cmd

假设 inputDir\ip 作为文件源, inputDir\op 作为输出目录, inputDir\test.xls 作为 xls

调用 batchxform.cmd c:\data

@echo off
    setlocal enableextensions

    cls

    if "%~1"=="" goto endProcess

    set _inputDir=%~1\ip
    set _outputDir=%~1\op
    set _xsl=%~1\test.xsl
    set _raptor=C:\Program Files (x86)\Altova\RaptorXMLServer2013\bin\RaptorXML.exe

    for %%f in ("%_inputDir%\*.xml") do (
        "%_raptor%" xslt --input="%%f" --output="%_outputDir%\%%~nxf"  "%_xsl%"
    )

:endProcess
    endlocal
于 2013-10-15T10:13:31.430 回答