2012-03-28 23 views
0

如果我有以下XML:如何通過XML值循環批處理CMD

<a> 
    <b>valA</b> 
    <b>valB</b> 
</a> 

<c> 
    <b>valA</b> 
    <b>valB</b> 
</c> 

及以下CMD:

for /f "delims=" %%f in ('dir /b /s server.xml') do (
FOR /F "tokens=2 delims=>" %%i in ('findstr "<a>" %%f') do @echo %%i > temp1.txt 
FOR /F "tokens=1 delims=<" %%i in (temp1.txt) do @echo %%i 

我需要訪問的值的節點b,但只有上述代碼將工作,如果我有這樣的值

<a>asdf</a> 

我只想遍歷父元素a

回答

5

對不起。我想我真的不明白,你所需要的,但下面的批處理文件顯示節點B的server.xml文件中的值:

for /F "tokens=3 delims=<>" %%i in ('findstr "<b>" server.xml') do echo %%i 

結果:

valA 
valB 

這是你想要的?

編輯:新版本根據附加註釋

@echo off 
setlocal EnableDelayedExpansion 
set fileName=server.xml 
findstr /N "<b>" %fileName% > nodesB.tmp 
call :seekNodesA < nodesB.tmp 
del nodesB.tmp 
goto :EOF 

:seekNodesA 
set lineB=0 
set startLine= 
for /F "delims=:" %%a in ('findstr /N "a>" %fileName%') do (
    if not defined startLine (
     set startLine=%%a 
    ) else (
     call :checkNodeB !startLine! %%a 
     set startLine= 
    ) 
) 
exit /B 

:checkNodeB startNodeA endNodeA 
if %lineB% gtr %1 goto showNodeB 
    set nodeB=99999999: 
    set /P nodeB= 
    for /F "tokens=1* delims=:" %%b in ("%nodeB%") do (
     set lineB=%%b 
     set "nodeB=%%c" 
    ) 
goto checkNodeB 
:showNodeB 
if %lineB% gtr %2 exit /B 
    for /F "tokens=3 delims=<>" %%i in ("%nodeB%") do echo %%i 
    set nodeB=99999999: 
    set /P nodeB= 
    for /F "tokens=1* delims=:" %%b in ("%nodeB%") do (
     set lineB=%%b 
     set nodeB=%%c 
    ) 
goto showNodeB 

鑑於此數據文件補充說:

<a> 
    <b>valB1-A</b> 
    <b>valB2-A</b> 
</a> 

<c> 
    <b>valB1-C</b> 
    <b>valB2-C</b> 
</c> 

<a> 
    <b>valB3-A</b> 
    <b>valB4-A</b> 
</a> 

上一頁批處理文件得到這樣的結果:

valB1-A 
valB2-A 
valB3-A 
valB4-A 

我假設了幾個細節。

+0

你原諒。我標記爲答案和upvoted,我想我需要的是知道如何遍歷a的子節點,incase節點b也包含在另一個父元素中。 danke – 2012-03-28 21:27:12

+1

文件中只有一個父節點a嗎?或者可能是其中的幾個?父節點a的每個內容都在幾個單獨的行中? – Aacini 2012-03-28 23:21:06

+1

@some_bloody_fool:檢查新版本我張貼... – Aacini 2012-03-29 01:13:19

0

雖然你需要添加一個根元素,使XML有效的,你可以檢查xpath.bat

call xpath.bat "server.xml" "//b"