DOS从xml文件中批量提取块

DOS从xml文件中批量提取块,xml,batch-file,Xml,Batch File,我找不到这样做的方法(已尝试通过StackOverflow进行搜索) 我有一个格式化的xml文件,我必须按原样从中提取一个块(不修改格式、选项卡等…),例如,让我们假设有一个名为some.xml 该块由以下内容分隔: <!- Let us call this tag_begin --> <Ask Ref_Ask="XXXYYYYY"> ... <!- Let us call this tag_end --> </Ask>

我找不到这样做的方法(已尝试通过StackOverflow进行搜索)

我有一个格式化的xml文件,我必须按原样从中提取一个块(不修改格式、选项卡等…),例如,让我们假设有一个名为
some.xml

该块由以下内容分隔:

 <!- Let us call this tag_begin -->
 <Ask Ref_Ask="XXXYYYYY">   
   ...
 <!- Let us call this tag_end -->
 </Ask>  

...
我成功地提取了blockend标记的开始行和结束行,但我无法将所有行的长度放入result.txt文件:行的长度为127个字符:怎么了

@echo off

Set Tag_Begin="<Ask Ref_Ask="
Set Tag_End="</Ask>"
set NB=XXXYYYY
set /A CPTE=0
set Line_Begin=
set Line_End=


Rem --- Find all possible start of block lines, and extract the good one set to Line_Begin
findstr /n /C:%Tag_Begin% some.xml | find /i "%NB%"> temporary.txt
for /f "tokens=1 delims=:" %%L in (temporary.txt) do set Line_Begin=%%L

Rem --- Finding the line order (from all possible start lines) which match the good one
findstr /n /C:%Tag_Begin% some.xml | findstr /n "%NB%"> temporary.txt
for /f "tokens=1 delims=:" %%O in (temporary.txt) do set order_begin=%%O
set /A order_begin-=1


Rem -- Looking for all possible end of block lines, and extract the "order_begin" one for Line_End
for /f "skip=%order_begin% tokens=1 delims=:" %%F in ('findstr /n /C:%Tag_End% some.xml') do set Line_End=%%F & goto away
:away


setlocal enabledelayedexpansion
for /f %%L in (some.xml) do (
set /A CPTE+=1
echo CPTE=!CPTE!
if !CPTE! GEQ %Line_Begin% if !CPTE! LEQ %Line_End% echo %%L >> result.txt
)
setlocal disabledelayedexpansion

del temporary.txt
@echo关闭
设置Tag_Begin=“未测试:

        @echo off
        for /f "tokens=1 delims=:" %%L in ('findstr /n "<!- Let us call this begin tag -->" ssome.xml') do ( 
         set begin_line=%%L
        )

        for /f "tokens=1 delims=:" %%L in ('findstr /n "<!- Let us call this end tag -->" some.xml') do ( 
         set /a end_line=%%L+1
        )

        echo showing lines between %end_line% and %begin_line%
        break>"%temp%\empty"
        fc "%temp%\empty" "some.xml" /lb  %end_line% /t |more +4 | findstr /B /E /V "*****" | more +%begin_line%
        del /Q /F "%temp%\empty"
@echo关闭
对于/f“tokens=1 delims=:”%%L in('findstr/n”“ssome.xml')do(
设置开始行=%%L
)
对于/f“tokens=1 delims=:”%%L in('findstr/n”“some.xml')do(
设置/a结束线=%%L+1
)
显示%end\u line%和%begin\u line%之间的行的回音
中断>%temp%\empty
fc“%temp%\empty”“some.xml”/lb%end_line%/t更多+4|findstr/B/E/V“*****”更多+%begin_line%
删除/Q/F“%temp%\empty”

在文件的三个位置更改
some.xml

这使用了一个名为
findrepl.bat
的助手批处理文件-

findrepl.bat
与批处理文件放在同一文件夹中

@echo off
type some.xml|findrepl "<Ask Ref_Ask=.XXXYYYYY.>" /e:"</Ask>" >newfile.xml
@echo关闭
键入some.xml | findrepl“”/e:“>newfile.xml

@JohnSaunders-批量生产更酷:)谢谢:我会根据我的需要尝试/更新它,并尽快让您知道3个部分:1)找到开始行2)找到结束行然后3)提取1和2,第一个pb是一些。xml包括许多此类块:很多开始标记:每个“Ref\u Ask=”都有唯一的引用人“很多结束标记:所以3的结束标记和开始标记一样多),我更改提取:我设置自己开始行和结束行使用更多+8,而更多+4必须在3的实际结束行中添加7),我还有一个pb,因为行是“剪切的”:在询问之前,不是行长度超过127个字符,关于xml格式引起的“<>”问题,我已经尝试使用setlocal。我已经编辑了答案,现在它更精确了。经过测试,效果良好。您不需要添加
setlocal
,因为都在引号内。但只会显示最后一段。。。