我必须从 xml 文件中读取特定标签,该文件在一行中包含全部内容。例如,我的 employee.xml 文件将如下所示
<EMP><FNAME>ss</FNAME><LNAME>rr</LNAME><ID>11</ID></EMP>
我想读取 .bat 文件中 LNAME 的值。
如果所有标签都位于单独的行中,我可以读取该文件,但如果它们位于一行中,则我的代码将失败。
任何人都可以帮助解决这个问题吗?是否可以在同一个批处理文件中处理这两种情况?
我必须从 xml 文件中读取特定标签,该文件在一行中包含全部内容。例如,我的 employee.xml 文件将如下所示
<EMP><FNAME>ss</FNAME><LNAME>rr</LNAME><ID>11</ID></EMP>
我想读取 .bat 文件中 LNAME 的值。
如果所有标签都位于单独的行中,我可以读取该文件,但如果它们位于一行中,则我的代码将失败。
任何人都可以帮助解决这个问题吗?是否可以在同一个批处理文件中处理这两种情况?
@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
.
处理命令为
替代品 # 一个分隔符 .* 任意数量的任意字符 \x3c \( sed 指令:保存... .* 任意数量的任意字符 \^) 待保存事物的结束;`)` 被 `^` 转义以不关闭 `IN` \x3c .* 任意数量的任意字符 # 替换字符串和替换字符串之间的分隔符 \1 检索事物 #1 已保存 # 替换字符串结束
谷歌为GNUSED
.
这使用了一个名为repl
.bat 的辅助批处理文件,来自 - 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