0

我必须从 xml 文件中读取特定标签,该文件在一行中包含全部内容。例如,我的 employee.xml 文件将如下所示

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

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

如果所有标签都位于单独的行中,我可以读取该文件,但如果它们位于一行中,则我的代码将失败。

任何人都可以帮助解决这个问题吗?是否可以在同一个批处理文件中处理这两种情况?

4

2 回答 2

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.

处理命令为

 
替代品  
# 一个分隔符  
.* 任意数量的任意字符   
\x3c   
\( sed 指令:保存...  
.* 任意数量的任意字符  
\^) 待保存事物的结束;`)` 被 `^` 转义以不关闭 `IN`  
\x3c   
.* 任意数量的任意字符  
# 替换字符串和替换字符串之间的分隔符  
\1 检索事物 #1 已保存  
# 替换字符串结束  

谷歌为GNUSED.

于 2013-10-02T15:08:14.037 回答
1

这使用了一个名为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
于 2013-10-02T13:40:57.030 回答