Как сделать XML форматированным с помощью тега пакетного скрипта по тегу (Pretty Print)? - PullRequest
0 голосов
/ 10 ноября 2018

Предположим, у меня ниже формат в одном файле:

         `<xml><tag><othertag>ABC</othertag></tag></xml>`

Но мне нужен форматированный вывод:

<xml>
 <tag>
      <othertag>ABC</othertag>
 </tag>

Этот форматированный вывод мне нужен в другом файле.

помогите мне с пакетным скриптом, который сможет выполнять такое форматирование.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

XML-файл не должен обрабатываться через пакетный файл. Однако этот конкретный пример дает мне возможность повеселиться с пакетным файлом, и это работает! ;)

@echo off
setlocal EnableDelayedExpansion

for /F "tokens=2 delims=`" %%a in (input.txt) do set "format=%%a"

for /F %%a in ('copy /Z "%~F0" NUL') do set NL=%%a^
% Don't remove %
% these lines  %
set "SP=    "
set "format=%format:></=>^!NL^!^!SP:~0,-8^!" ^& set "SP=^!SP:~0,-4^!" ^& set /P "=</%"
< NUL (set /P "=%format:><=>!NL!!SP!" & set "SP=    !SP!" & set /P "=<%" & echo/) > output.txt

Выход:

<xml>
    <tag>
        <othertag>ABC</othertag>
    </tag>
</xml>

Описание используемого метода см. В этой теме .

0 голосов
/ 11 ноября 2018

попробуйте это (он не проверяет, имеет ли XML допустимый синтаксис):

call ::beautifyXml "c:\some.xml"
call ::beautifyXml "c:\some.xml" > "c:\new.xml"

exit /b %errorlevel%


:beautifyXml
powershell "function fx($xml, $i=2){$SW=New-Object System.IO.StringWriter;$XW=New-Object System.XMl.XmlTextWriter $SW; $XW.Formatting='indented';$XW.Indentation=$i;([xml]$xml).WriteContentTo($XW);$XW.Flush();$SW.Flush();Write-Output $SW.ToString();};FX (gc -path """%~f1""") -i 4"
goto :eof

Если новый файл выглядит нормально, вы можете добавить дополнительную команду перемещения для замены старого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...