从bat文件中包含单行的文件中读取xml标记

时间:2013-10-02 13:34:22

标签: xml batch-file

我必须从xml文件中读取一个特定标记,该文件将整个内容放在一行中。 例如,我的employee.xml文件将显示如下所示的内容

<EMP><FNAME>ss</FNAME><LNAME>rr</LNAME><ID>11</ID></EMP>

我想在.bat文件中读取LNAME的值。

如果所有标签都在一个单独的行上,我能够读取该文件,但如果它们只有一行,那么我的代码就会失败。

有人可以帮忙解决这个问题吗?也可以同时处理同一个批处理文件中的两个场景吗?

2 个答案:

答案 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