如何使用批处理findstr提取XML中两个标签之间的所有内容?

时间:2017-03-10 14:20:53

标签: regex xml batch-file findstr

我正在尝试在<datafield tag="036E"></datafield>之间提取所有内容。

 <datafield tag="036E">
    <subfield code="a">Collana del dialogo ebraico-cristiano</subfield>
    <subfield code="l">1</subfield>
  </datafield>

是否可以批量处理findstr和regex,例如[036E">].*[</datafield>]

2 个答案:

答案 0 :(得分:0)

使用支持XML的工具。例如,在xsh(我碰巧维护的工具)中,您可以编写

open file.xml ;
ls //datafield[@tag='036E'] ;

答案 1 :(得分:0)

此解决方案&#34;使用批处理查找器提取XML中两个标签之间的所有内容&#34;按照您的要求,并正确处理您发布的数据:

@echo off
setlocal EnableDelayedExpansion

set "start="
set "lines="

rem Get start and number of lines with findstr
for /F "delims=:" %%a in ('findstr /N "</*datafield" input.txt') do (
   if not defined start (set "start=%%a"
   ) else if not defined lines set /A "lines=%%a-start-1"
)

for /F "skip=%start% delims=" %%a in (input.txt) do (
   echo %%a
   set /A lines-=1
   if !lines! equ 0 goto exitLoop
)
:exitLoop

但是,如果标签未放置在包含所需数据的单独行中,则此解决方案将失败...