【问题标题】:Splitting of XML FileXML 文件的拆分
【发布时间】:2022-01-08 12:20:42
【问题描述】:

我正在尝试使用 cmd 将一行的 XML 文件拆分为多行,有人可以帮助我吗?例如

输入:

<ns2:requestor><name>OBSS_PROCESS</name><correlationId>fe5eb119-d8d6-45b9-b493-759f21baf0d7</correlationId><dateTime>2022-01-07T15:49:37.792-06:00</dateTime></ns2:requestor><ns2:customerIdentifier>DG</ns2:customerIdentifier>

输出:

<ns2:requestor>
<name>OBSS_PROCESS</name>
<correlationId>fe5eb119-d8d6-45b9-b493-759f21baf0d7</correlationId>
<dateTime>2022-01-07T15:49:37.792-06:00</dateTime>
</ns2:requestor>
<ns2:customerIdentifier>DG</ns2:customerIdentifier>

我尝试了其中一个 Unix 命令并将其更改为 windows,但我认为这还不够

repl's/>\n' test.xml

【问题讨论】:

  • cmd 还是 Powershell?选一个,它们不是一回事。还有,有什么问题吗?你的代码在哪里? Stack Overflow 不是您的代码编写服务。显示你写的代码,问一个问题。
  • @Tomalak CMD 或 Powershell 都适合我,但最好是 cmd。
  • 提供的 XML 格式不正确有两个原因:(1) 缺少根标记,(2) 没有 ns2 命名空间声明。所以它不是 XML 文件,

标签: xml cmd split tags treeview


【解决方案1】:

作为一个将产生您所说的目标的简单过程,您可以使用在cmd 中运行的这个 .bat 文件。如果您使用的是受支持的 Windows 系统,则可以使用 PowerShell。听取@Mofi 的评论并找到合适的工具可能是一个更好的主意。

=== afile.bat

@powershell -NoLogo -NoProfile -Command ^
    "$(Get-Content -Path '.\afile.xml') -replace '(</.*?>)', ('$1'+\"`n\")"

执行示例:

C:>afile.bat
<ns2:requestor><name>OBSS_PROCESS</name>
<correlationId>fe5eb119-d8d6-45b9-b493-759f21baf0d7</correlationId>
<dateTime>2022-01-07T15:49:37.792-06:00</dateTime>
</ns2:requestor>
<ns2:customerIdentifier>DG</ns2:customerIdentifier>

更新:

这没有经过太多测试,也没有做太多错误检查,但它可能会做你想做的事。在命令行中指定 .xml 文件名作为参数。

=== afile.bat

@ECHO OFF
SET "THEFILE=%~1"
IF "%THEFILE%" == "" (
    ECHO "usage: %0 <xmlfilename>"
) ELSE (
    COPY "%THEFILE%" "%THEFILE%.backup" >NUL
    @powershell -NoLogo -NoProfile -Command ^
        "$s = Get-Content -Path "%THEFILE%";" ^
        "$s -replace '(</.*?>)', ('$1'+\"`n\")" ^| Out-File -FilePath "%THEFILE%" -Encoding ascii"
)

更新 2:

afile.bat 脚本设计用于处理一 (1) 个 .xml 文件。 .xml 文件名被指定为命令行上的参数。请注意,C:&gt; 是命令行提示符,不是命令的一部分。

C:>afile.bat afile.xml

运行此命令后,afile.xml文件将被复制到afile.xml.backup,修改后的内容将在afile.xml中。

如果要对目录中的所有文件运行 afile.bat,可以使用 FOR 循环。

FOR /F "delims=" %A IN ('DIR /B "*.xml"') DO ("afile.bat" "%~A")

如果将 FOR 循环置于 .bat 文件脚本中,则循环变量必须将 PERCENT SIGN 字符加倍。

FOR /F "delims=" %%A IN ('DIR /B "*.xml"') DO ("afile.bat" "%%~A")

【讨论】:

  • 您的回答绝对没问题 在这里再提出一个请求,我们可以编辑并保存相同的文件而不使用上述命令。
  • @Sheikh_Sheharyar,请参阅更新部分。
  • 这个更新的部分不起作用,或者我可能没有正确执行它,请您帮帮我。
  • 你能说更多关于“不工作”的信息吗?有错误信息吗?输出不正确的原因是什么?
  • 在执行命令时,我有以下输出“用法:a.bat
猜你喜欢
  • 1970-01-01
  • 2011-09-12
  • 2023-04-02
  • 2011-09-20
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多