【问题标题】:How to make XML formatted using batch script tag by tag(Pretty Print)?如何通过标签(Pretty Print)使用批处理脚本标签来格式化 XML?
【发布时间】:2018-11-10 17:26:15
【问题描述】:

假设我在一个文件中有以下格式:

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

但我需要以下格式化输出:

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

这个格式化的输出我需要它在其他文件中。

帮助我使用能够进行此类格式化的批处理脚本。

【问题讨论】:

  • 这可以通过 xslt 转换和由批处理脚本调用的使用 vbscript、jscript 或 powershell(默认安装在 Windows 上)的脚本轻松完成。稍后我会尝试为此创建一个脚本。
  • 由于遇到所有特殊字符,批量处理 XML 可能非常棘手。在 google 上搜索xml formatter,你会发现很多免费软件可以在缩小格式和漂亮格式之间进行转换。

标签: xml batch-file formatting


【解决方案1】:

试试这个(它不检查 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

如果你的新文件看起来不错,你可以添加额外的移动命令来替换旧的。

【讨论】:

  • 对于大部分以 UTF8 编码的 XML 文件,我更愿意使用 -Encoding 参数写入 powershell 部分中的文件。
  • @LotPings - 好点。稍后(如果我有时间)我会尝试编辑脚本。
【解决方案2】:

不应通过批处理文件处理 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>

有关使用方法的说明,请参阅this thread

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多