Xml 基于键';文本';从批处理文件

Xml 基于键';文本';从批处理文件,xml,batch-file,command-line,xml-parsing,Xml,Batch File,Command Line,Xml Parsing,我试图解析一个XML文件(TestResult.XML是XML文件的名称),如下所示: <?xml version="1.0" encoding="utf-8" standalone="no"?> <test-run id="0" runstate="Runnable" testcasecount="94" result="Failed"

我试图解析一个XML文件(TestResult.XML是XML文件的名称),如下所示:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<test-run id="0" runstate="Runnable" testcasecount="94" result="Failed" total="90" passed="89" failed="1" inconclusive="0" skipped="0" asserts="220" engine-version="3.11.1.0" clr-version="4.0.30319.42000" start-time="2020-08-31 09:57:53Z" end-time="2020-08-31 10:00:06Z" duration="132.798955">
我使用基于xml中键/值的位置(8^、10^、12^、14^)的标记实现了结果。但这些职位会在定期升级时发生变化。因此,我希望基于键文本获取相同的值

帮助我根据键文本而不是键/值位置获取这些值。
我刚刚开始构建脚本,需要以这种方式进行指导。

此简单方法适用于您的数据:

@echo off
setlocal EnableDelayedExpansion

for /F "delims=" %%a in ('find "test-run" TestResult.xml') do set "line=%%a"
set "line=%line:* =%"
set "var="
for %%a in (%line:~0,-1%) do (
   if not defined var (
      set "var=%%a"
   ) else (
      set "!var!=%%~a"
      set "var="
   )
)

echo: Result:%result%, TotalTestCases:%total%, Passed:%passed%, Failed:%failed%
输出:

 Result:Failed, TotalTestCases:90, Passed:89, Failed:1

此简单方法适用于您的数据:

@echo off
setlocal EnableDelayedExpansion

for /F "delims=" %%a in ('find "test-run" TestResult.xml') do set "line=%%a"
set "line=%line:* =%"
set "var="
for %%a in (%line:~0,-1%) do (
   if not defined var (
      set "var=%%a"
   ) else (
      set "!var!=%%~a"
      set "var="
   )
)

echo: Result:%result%, TotalTestCases:%total%, Passed:%passed%, Failed:%failed%
输出:

 Result:Failed, TotalTestCases:90, Passed:89, Failed:1

批处理文件从未被设计用于解析文件中的文本,尤其是那些主要使用对解析器来说是“特殊”或“有毒”字符的文件。我强烈建议您使用另一种脚本语言来完成任务,例如,具有对解析文件的内置支持。如果您的工作VSanka的一部分是解析XML文件,而您的组织不允许您使用可以这样做的工具,那么您需要通知他们您无法充分执行任务。没有理由不将内置于操作系统中的或用于它们更适合的任务。此外,两者都可以运行,没有问题,直接从或在一个太!批处理文件从未被设计用于解析文件中的文本,尤其是那些主要使用对解析器来说是“特殊”或“有毒”字符的文件。我强烈建议您使用另一种脚本语言来完成任务,例如,具有对解析文件的内置支持。如果您的工作VSanka的一部分是解析XML文件,而您的组织不允许您使用可以这样做的工具,那么您需要通知他们您无法充分执行任务。没有理由不将内置于操作系统中的或用于它们更适合的任务。此外,两者都可以运行,没有问题,直接从或在一个太!