我必须从一个xml文件中读取一个特定标记,该文件包含整行内容。 比如我employee.xml文件看起来如下图所示从bat文件中包含单行文件的文件中读取xml标记
<EMP><FNAME>ss</FNAME><LNAME>rr</LNAME><ID>11</ID></EMP>
我想读LNAME的.bat文件的值。
我能读取文件,如果所有的标签来自一个单独的行,但如果他们在一行中,那么我的代码失败。
任何人都可以请帮忙解决这个问题吗?也有可能在同一个批处理文件中处理这两种情况?
我必须从一个xml文件中读取一个特定标记,该文件包含整行内容。 比如我employee.xml文件看起来如下图所示从bat文件中包含单行文件的文件中读取xml标记
<EMP><FNAME>ss</FNAME><LNAME>rr</LNAME><ID>11</ID></EMP>
我想读LNAME的.bat文件的值。
我能读取文件,如果所有的标签来自一个单独的行,但如果他们在一行中,那么我的代码失败。
任何人都可以请帮忙解决这个问题吗?也有可能在同一个批处理文件中处理这两种情况?
这将使用名为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
@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
谷歌为GNUSED
。
这是有效的和动态的。 – foxidrive
这适用于OP的示例。但是如果XML内容超过〜8k字节,它可能会失败。 – dbenham
这是真的。我测试了一个大约5MB的文件,这段代码不起作用。是否有可能改变大文件的逻辑? – user2593173
没有使用repl.bat的简单方法 – user2593173
简单吗?也许。简单而可靠的数据可以改变?也许,但通常不会。这一切都取决于确切的文字数据以及它如何改变。批处理文件在很多情况下依赖于数据的组成。您可以使用SED等第三方工具,这将是一个简单的命令。 – foxidrive
xml文件将具有相同的结构,并且将始终查找特定字段(本例中为LNAME)。 – user2593173