如果我有以下xml:
<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
答案 0 :(得分:5)
对不起。我想我真的不明白你需要什么,但下面的批处理文件显示了server.xml文件中节点b的值:
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
我假设了几个细节。
答案 1 :(得分:1)
虽然您需要添加根元素才能使xml有效,但您可以查看xpath.bat:
call xpath.bat "server.xml" "//b"