使用批处理文件解析xml

使用批处理文件解析xml,xml,batch-file,Xml,Batch File,我一直在使用这里列出的这个想法 但我不能评论,要求更多的问题,所以我要求更多的帮助,这不是一个真正的重复,因为我改变了一些事情 因此,我的channelGuide.xml如下所示 <Guide> <listings> <channels> <channel ID='1' name='big bang' url='http://v.com/bigbang' quality='best' /> &

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

但我不能评论,要求更多的问题,所以我要求更多的帮助,这不是一个真正的重复,因为我改变了一些事情

因此,我的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>
我不希望单引号或任何东西看起来像这样:

@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"
)
'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
@ECHO关闭
SETLOCAL
对于(q25617807.txt)中的/F“tokens=2,4,6,8delims=”%%a(
如果“%%d”neq”回波(%%a%%b%%c%%d
)
后藤:EOF
我使用了一个名为
q25617807.txt
的文件,其中包含用于测试的数据,并删除了文件重定向以适应我的测试制度


说明,使用提供的单个数据行

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

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

  • 空间
  • 其中,已选择令牌2、4、6和8,因此它们将按顺序应用于%%a..%d

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

    时间?在失业13年后,我已经明白了这一点……

    for/f“tokens=1,2,3,5,7,9 delims=”您可以尝试使用-script,通过给定的xpath从xml文件中获取值:

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

    XML有一些限制,可能会破坏批处理文件解决方案-请在此处阅读:如果您有时间,也许可以解释一下这里正在做什么,以便我可以了解更多。感谢您的帮助,如果XML中有其他行包含8个标记(或更多),则可能会出现问题(这不太可能)@Stephan:当然可以。如果需要,可以通过更改
    标记
    赋值和分析另一个或多个标记来选择输出。不是你说的,不太可能,但可能。更可能的是,程序标题可能包含一个单引号,但这表明语言的命令远远超出了明显的能力不幸的是,
    txt
    一代的s…如果我只是想获取像id#2这样的某个id的信息,那该怎么办?这已经开始成为一个传奇。为了简单地增加id=2,然后将
    if
    语句修改为
    if“%%d”neq”“if”%%a“eq”2“..
    即,当第四个字段存在且第一个字段等于
    2
    时。