.xsl脚本通过.bat添加到.xml

时间:2017-01-14 20:34:01

标签: xml batch-file xslt

我的文件扩展名为.tlf,文件包含xml数据,当我用.xml重命名时,它显示并读取为xml文件; 我只使用带有

的.bat文件
ren FISDB001.tlf FISDB001.xml

FISDB001.xml的顶行如下所示

<?xml version="1.0" encoding="UTF-8"?>
<workspace id="ais:-24ivtsesb18hr-1f4r7b5s7n7c4" name="FISDB" path="NAVY" time="1481644548" workspace-type="AIS" version="1">
<object id="8#83067">

当我添加.xsl脚本(第二行)时,它会显示在互联网浏览器(即Google)中。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" version="2" href="FISDB.xsl"?>
<workspace id="ais:-24ivtsesb18hr-1f4r7b5s7n7c4" name="FISDB" path="NAVY" time="1481644548" workspace-type="AIS" version="1">
<object id="8#83067"

如何通过.bat文件添加.xsl脚本行?。

我还需要运行两个.bat文件,还是可以从一个文件中完成两个进程?。

2 个答案:

答案 0 :(得分:0)

@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q41654708.xml"
SET "outfile=%destdir%\q41654708.xml"
SET "xslline=^<?xml-stylesheet type="text/xsl" version="2" href="FISDB.xsl"?^>"
(
 FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
  ECHO(%%a
  IF DEFINED xslline ECHO(%xslline%
  SET "xslline="
 )
)>"%outfile%"

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。 我使用了一个名为q41654708.xml的文件,其中包含我的测试数据。

生成定义为%outfile%

的文件

请注意,我使用了两个不同的目录和相同的文件名。输出绝对文件名应与输入

不同

只需将set变量添加到所需的额外行 - 请注意,重定向符<>需要使用插入符^进行转义。

然后阅读每一行并回流它。在每一行之后,吐出所需的额外行,但随后将变量设置为 nothing 。这将确保变量在第一行之后为空,在所需位置插入所需的行。

答案 1 :(得分:0)

考虑直接运行您的XSLT,将.tlf转换为.html,而无需调用<?xml-stylesheet ... ?>内联。如果您有自己的XSLT处理器(Xalan,Saxon等)批量调用。下面使用外部PowerShell脚本进行转换,使用内置的.NET类XslCompiledTransform

<强>的PowerShell

param ($xml, $xsl, $output)

if (-not $xml -or -not $xsl -or -not $output) {
    Write-Host "& .\xslt.ps1 [-xml] xml-input [-xsl] xsl-input [-output] transform-output"
    exit;
}

trap [Exception]{
    Write-Host $_.Exception;
}

$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;

$xslt.Load($xsl);
$xslt.Transform($xml, $output);

Write-Host "generated" $output;

批量 (当然根据需要更改为相关目录)

Powershell.exe -File "C:\Path\To\PowerShell\Script.ps1"^
 "C:\Path\To\PowerShell\FISDB001.tlf" "C:\Path\To\PowerShell\FISDB.xsl"^
 "C:\Path\To\PowerShell\FISDB001.html"