如何保存xml解析输出结果为csv格式

时间:2016-08-01 07:45:26

标签: batch-file

下面的批处理脚本读取xml文件并提取所需的标记/值并将它们保存在输出文件中但问题是,所有必需的标记值在A列中一个接一个地保存。我希望每个标记值都存储起来在每个标记标题下面。非常感谢任何帮助。

xml输入文件内容:

<RIMP>
<HSI>
<SN>Pro Gen8</SN>
<SP>Podt1</SP>
<UUID>ILD9V</UUID>
<VIRTUAL>
<PN>Inte 4</PN>
<VID>
<BSN></BSN>
<TYPE>Admin</TYPE>
</VID>
</VIRTUAL>
<PRODUCTID> 9A          </PRODUCTID>
<NICS>
<NIC>
<PORT>1</PORT>
<MACADDR></MACADDR>
</NIC>
</RIMP>   

代码:

 set inFile="C:\output\input.xml"
    set outFile="C:\output.csv"
    set req_tags=SN UUID PN TYPE
    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! 
        )
    )

当前输出为:(在文本编辑器中打开文件后)

SPN,UUID,PN,TYPE 
Pro Gen8            
ILD9V           
Inte 4          
Admin       

但我试图输出为:

SN,UUID,PN,TYPE 
Pro Gen8,ILD9V,Inte 4,Admin     

使用DavidPostill代码后,我现在得到预期的输出:

SN,UUID,PN,TYPE 
Pro Gen8,ILD9V,Inte 4,Admin 

如何在csv文件中添加服务器ip / info作为第一列(服务器信息来自serverlist文件)

Server,SN,UUID,PN,TYPE 
11.12.13.14,Pro Gen8,ILD9V,Inte 4,Admin 

David的代码可以解决这个问题,任何人都需要有关csv格式输出的答案然后我建议请看下面David的回复。

1 个答案:

答案 0 :(得分:1)

我希望每个标记值都存储在各自的标记标题

假设您确实想要CSV文件作为输出,请使用以下批处理文件。

<强> TEST.CMD

@echo off
setlocal enabledelayedexpansion
set inFile="C:\output\input.xml"
set outFile="C:\output.csv"
set req_tags=SN UUID PN TYPE
set outLine=
echo SN,UUID,PN,TYPE > %outFile% 
for %%a in (%inFile%) do (
  for %%c in (%req_tags%) do (
    set search_tag=%%c
    for /f "tokens=2 delims=><  " %%b in ('type "%%a" ^|findstr /i !search_tag!' ) do (
      if [%%b] NEQ [] (
        rem we don't want to match /BSN
        if [%%b] NEQ [/BSN] (
          set outline=!outline!%%b,
        )
      )
    )
  )
)
rem output the values
rem remove trailing ,
set outline=%outline:~0,-1%
echo %outline%>>"%outFile%"
endlocal

<强>用法:

F:\test>test

F:\test>type C:\output.csv
SN,UUID,PN,TYPE
Pro Gen8,ILD9V,Inte 4,Admin

F:\test>

进一步阅读