2017-01-14 2 views
1

У меня есть файл с расширением .tlf, файл содержит данные xml, когда я переименовываю его в .xml, и он отображает и читает как xml-файл; Я просто использовать файл .bat с.xsl скрипт добавлен в .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" 

Как добавить строку сценария .xsl через файл .bat ?.

Также мне нужно было запустить два .bat-файла или я мог бы выполнить оба процесса с одного ?.

+1

Если вы хотите добавить инструкцию обработки в документ XML, ознакомьтесь с оболочками, предоставляющими доступ к XML API; Я не думаю, что пакетные файлы предоставляют это, поэтому в Windows я буду рассматривать Powershell или Windows Script Host. –

+0

@MartinHonnen - ты читаешь мой разум! Я просто ответил сценарием PowerShell! – Parfait

ответ

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 

Вам потребуется изменить настройки sourcedir и destdir в соответствии с вашими обстоятельствами. Я использовал файл с именем q41654708.xml, содержащий ваши данные для моего тестирования.

Производит файл определяется как% Outfile%

Обратите внимание, что я использовал два различных каталоги и тот же файл. Выход абсолютный файл должен отличаться от входа

Просто set переменного до требуемой дополнительной линии - обратите внимание, что перенаправители <> нужно экранировать с кареткой ^.

Затем прочитайте каждую строку и извергайте ее. После каждой строки выплюнуть требуемую дополнительную строку, но затем установите для нее значение ничего. Это гарантирует, что переменная пуста для каждой строки после первой, вставив нужную строку в нужное место.

+0

Я использовал ваше решение, и оно отлично работает. – Eldrak

+0

Спасибо миллиону Magoo. – Eldrak

+0

Magoo, могу ли я добавить строки ниже в файл .bat, чтобы убить FISDB.tlf? После того, как он создал мой FISDB.xml? cd "C: \ Users \ user \ Desktop" DEL FISDB001.tlf Я могу запустить строки в отдельном байте (и он работает), но мне бы хотелось все это в одном пакете (если это возможно). – Eldrak

0

Рассмотрите возможность прямого запуска XSLT, чтобы преобразовать .tlf в .html, без необходимости звонить <?xml-stylesheet ... ?> inline. Если у вас есть собственный 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; 

Batch(конечно изменения в относительных каталогов по мере необходимости)

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" 
Смежные вопросы