使用批处理脚本从xml文件获取标签值并将结果保存到csv文件中

赫尔克

我有xml文件,需要提取所需的标签值,然后将结果输出到csv文件中,标签名称为header,并且标题的值位于其下方。

到目前为止,我尝试过获取xml标记和值,但是所有结果都显示在1列而不是表格格式中。

xml文件内容(部分文件内容):

<RSP>
<HSI>
<SN>CZ9V      </SN>
<SP>Pro Gen8</SP>
<UUID>C9V</UUID>
</HSI>
<STP>3</STP>
<cUUID>343-11</cUUID>
<NICS>
<NIC>
<PORT>1</PORT>
<MACADDR>01:51:f2</MACADDR>
</NIC>
<NIC>
<PORT>1</PORT>
<MACADDR>00:17</MACADDR>
</NIC>
<NIC>
<PORT>2</PORT>
<MACADDR>77:28:02</MACADDR>
</NIC>
<NIC>
<PORT>3</PORT>
<MACADDR>00:04</MACADDR>
</NIC>
<NIC>
<PORT>4</PORT>
<MACADDR>00:06</MACADDR>
</NIC>
</NICS>
</RSP>

输出正在从output.csv文件获取:

SN,SP,UUID,MACADDR,cUUID
CZ9V
Pro Gen8
C9V

01:51:f2 343-11

我想要得到的是:

SN,SP,UUID,MACADDR,cUUID
CZ9V,Pro Gen8,C9V,01:51:f2,343-11

当我们在电子表格中打开output.csv时,如果需要,可以使用过滤器选项轻松过滤以上所有结果。

到目前为止的代码可以得到:

echo SN,SP,UUID,MACADDR,cUUID> %outFile%
set req_tags=SN SP UUID MACADDR cUUID
for %%a in (%inFile%) do (
for %%c in (%req_tags%) do (
set "found="
set search_tag=%%c
for /f "tokens=2 delims=><  " %%b in ( ' type "%%a" ^|findstr /i !search_tag! ' ) do set found=%%b
 if defined found >> "%outFile%" echo !found! 
)
)

需要在output.csv文件中的相应标签名称下获取标签vlaue。

菲利普

鉴于要求有所变化,我选择发布一个新答案,而不是编辑原始答案。不知道这是否是做事的方式,但是,嘿,我尽力了... :)

这是一个不关心XML层次结构的版本,它只是从指定元素列表中提取令牌值。但是,请注意,我刚才解释,在多个孩子可能属于一个共同的父元素(即使XML的层次结构并不能反映它)的情况下没有在这里处理。但是,根据OP的要求,输出在一行上:

@echo off
setlocal enabledelayedexpansion
set req_tags=SN SP UUID MACADDR cUUID
set inFile="C:\tests\xmltocsv.txt"
set outFile="C:\tests\output.csv"
if exist %outFile% del %outFile%

rem set the header line
set hLine=
for %%a in (%req_tags%) do (
  set hLine=!hLine!,%%a
)
call :outputlinetocsv "%hLine%"

rem add values to file
set csvLine=
for %%a in (%req_tags%) do (
  set sTag=%%a
  for /F "tokens=2 delims=<>" %%f in ('findstr /I /L "^</!sTag!" %inFile%') do (
    set line=%%f
    set "line=!line:*>=!"
    set csvLine=!csvLine!,!line!
  )
)
call :outputlinetocsv "%csvLine%"
goto :eof

:outputlinetocsv
REM remove starting comma
set myLine=%~1
set "myLine=!myLine:*,=!"
echo !myLine! >> %outFile%
goto :eof

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

批处理-从XML文件获取标签值

如何使用 NiFi 处理器获取 csv 文件行内容并将其保存到数据库中?

使用批处理卷曲多个 url 并将结果保存在 txt 文件中

如何从Powershell获取返回值并将其保存在批处理文件中?

使用批处理将多行变量保存到文件中

Windows:使用GIMP批处理图像并将其保存到新文件

使用Windows批处理脚本在CSV文件中添加列

使用批处理脚本在目录中获取文件名

如何使用批处理脚本从JSON文件获取数据并将数据写入文本文件?

Windows 批处理循环将结果逐行保存到文件中

将json转换为xml并将结果保存到文件

如何使用批处理脚本将值存储在变量中并将该变量作为新列加载到文件中?

如何使用熊猫从csv读取行,执行VLOOKUP操作并将结果保存到另一个文件中?

如何使用纯批处理从单行 XML 文件中获取多个属性值?

批处理文件,一个接一个地复制文件和文件夹结构,验证结果并将报告保存到txt

从查询中仅获取1个结果-将结果保存到CSV文件中

如何检查CSV文件中存储的多个URL的URL状态并将结果保存到新的CSV文件中

如何汇总不同csv文件第二列中的相同id和值并将结果保存到带有pandas的新csv中?

使用批处理文件在文件中查找文本,然后清除它,保存到文件和变量中

使用批处理文件将Ping命令输出保存到变量中

Bash脚本-如何获取.txt文件中目录的大小并将其保存到其他文件中?

如何从批处理文件中的xml中获取属性值以创建运行文件的条件

如何从mongo shell使用load()函数加载JavaScript并将结果保存到文件中?

使用sed编辑文件并将结果保存到名称基于原始文件名的其他文件中

Crontab脚本未将结果保存到文件中

ssh shell:disown脚本未将结果保存到文件中

如何使用批处理运行命令并将输出保存在文本文件中?

Bash:将python代码的结果保存到bash脚本并将结果写入文件

在Jenkins Groovy脚本中,如何从批处理文件中获取返回值