使用批处理文件解析xml

时间:2014-09-02 07:15:06

标签: xml batch-file

我一直在使用这里列出的这个想法

Parse XML file for attribute from batch file

但我不能发表评论,要求提出更多问题,所以我要求更多帮助,这不是真正的重复,因为我改变了几件事

所以我的channelGuide.xml看起来像这个

<Guide>
   <listings>
      <channels>
         <channel ID='1' name='big bang' url='http://v.com/bigbang' quality='best' />
         <channel ID='2' name='AMerican Dad' url='http://v.com/americandad' quality='best' />
      </channels>
   </listings>
</Guide>

现在我的.bat文件如下所示:

@echo off
cls
setlocal EnableDelayedExpansion

for /F tokens^=2^-9^,7delims^=^<^"^= %%a in (channelGuide.xml) do (
   if "%%a" equ "channel ID" echo(%%b %%c %%d %%e>>"%~d0%~p0\channelListings.txt"
)

但出于某种原因,我的.tx会像这样回来:

'1' name 'big bang' url 'http://v.com/bigbang' quality 'best' />
'2' name 'AMerican Dad' url 'http://v.com/americandad' quality 'best' />

我不希望使用单引号或其他任何内容,只是看起来像这样:

1 big bang http://v.com/bigbang best
2 AMerican Dad http://v.com/americandad best

3 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL

for /F "tokens=2,4,6,8delims='" %%a in (q25617807.txt) do (
   if "%%d" neq "" echo(%%a %%b %%c %%d
)

GOTO :EOF

我使用了一个名为q25617807.txt的文件,其中包含我的测试数据,并删除了文件重定向以适应我的测试制度。


说明,使用提供的单一数据线

   <channel ID='1' name='big bang' url='http://v.com/bigbang' quality='best' />

数据行使用单引号作为分隔符标记为标记

  1. Spaces &lt; channel ID =
  2. 1
  3. 空间名称=
  4. big bang
  5. 空间 URL =
  6. http://v.com/bigbang
  7. 空间质量=
  8. 最好的
  9. 空间 /&GT;
  10. 其中,选择了令牌2,4,6和8,因此它们按顺序应用于%% a .. %% d。

    另一行不太可能在单引号中包含4个字符串(并且未在原始数据中显示),因此只需过滤“%% d”不为空即可。

    时间?经过13年的失业,我就是那种黑桃......

答案 1 :(得分:1)

您可以尝试xpath.bat - 脚本,该脚本可以通过给定的xpath从xml文件中获取值:

for /f "tokens=* delims=" %%# in ('xpath.bat "chanel.xml" "//channel[0]/@name"') do (
  set name1=%%#
)

for /f "tokens=* delims=" %%# in ('xpath.bat "chanel.xml" "//channel[0]/@url"') do (
  set url1=%%#
)

for /f "tokens=* delims=" %%# in ('xpath.bat "chanel.xml" "//channel[0]/@quality"') do (
  set quality1=%%#
)

echo %name1% %url1% %quality1%

答案 2 :(得分:0)

for /f "tokens=1,2,3,5,7,9 delims='<" %%a in (channellistings.xml) do if "%%b"=="channel ID=" echo %%c %%d %%e %f

您应该考虑使用(例如);而不是空格来界定输出。之后处理它可能会更容易。 (例如用excel阅读)