我必须从xml文件中读取一个特定标记,该文件将整个内容放在一行中。 例如,我的employee.xml文件将显示如下所示的内容
<EMP><FNAME>ss</FNAME><LNAME>rr</LNAME><ID>11</ID></EMP>
我想在.bat文件中读取LNAME的值。
如果所有标签都在一个单独的行上,我能够读取该文件,但如果它们只有一行,那么我的代码就会失败。
有人可以帮忙解决这个问题吗?也可以同时处理同一个批处理文件中的两个场景吗?
答案 0 :(得分:1)
这使用名为repl
的帮助程序批处理文件。来自 - http://www.dostips.com/forum/viewtopic.php?f=3&t=3855
将repl.bat
放在与批处理文件相同的文件夹中。
@echo off
for /f "delims=" %%a in ('type employee.xml ^|repl ".*<LNAME>(.*)</LNAME>.*" "$1" a ') do echo "%%a"
pause
答案 1 :(得分:1)
@ECHO OFF
SETLOCAL
FOR /f "delims=" %%i IN (q19138159.txt) DO SET line=%%i
:loop
FOR /f "tokens=1*delims=<>" %%i IN ("%line%") DO SET line=%%j&IF /i NOT "%%i"=="lname" GOTO loop
FOR /f "tokens=1delims=<>" %%i IN ("%line%") DO SET line=%%i
ECHO lname=%line%=
GOTO :EOF
其中q19138159.txt是包含XML行的文件。
对于大文件 - 得到SED的支持
@ECHO OFF
SETLOCAL
FOR /f "delims=" %%i IN (
'sed s#.*\x3cLName\x3e\(.*\^)\x3c/LName\x3e.*#\1# q19138159.txt'
) DO ECHO %%i
GOTO :eof
GNUSED
将处理包含<LName>something or other</LName>
的文件,以提取something or other
。
处理命令是
s substitute # a delimiter .* Any number of any characters \x3c \( sed instruction : save... .* any number of any characters \^) End of thing-to-be-saved; `)` escaped by `^` to not-close the `IN` \x3c .* any number of any characters # delimiter between substitute-for-string and substitute-with string \1 retrieve thing #1 saved # end of substitute-with string
Google GNUSED
。