我想创建一个简单的(希望)Batch文件,它可以搜索XML文件并从2个字符串中提取内容。
XML文件始终包含以下内容:
<NAME>John Smith</NAME>
这将位于XML内部,但每次可能位于不同的位置/行。如果可能,我需要提取名称并将其变为变量。
编辑
到目前为止,我一直在使用findstr for /F "tokens=2 delims=<> %%a in ('findstr "<name>" C:\list.xml') do set name=%%a echo %name%
这个名字可能是3或4个单词,有时包含 - 上述作品有时候只是在它自己独立的行上,但情况并非总是如此。
<NAME>John Smith</NAME>
总是在一起并始终在同一条线上,但并不总是在它自己的单独一行上。
示例XML数据(全部在一行上)<?xml version="1.0" encousrng="UTF-8"?><usrsclib xmlns="urn:usrsclib"><usr:usrscinfo xmlns:usr="urn:GOT:-;usrscinfo"><usr:site><name>John Smith</name><usr:numSets>1</usr:numSets><usr:setNumber>1</usr:setNumber></usr:site><usr:description><usr:table><usr:siteName siteNumber="1">Main42</usr:siteName></usr:tableOfContents><usr:web href="www" /><usr:web href="www" /></usr:description><usr:city>hin</usr:city></usr:usrscinfo></usrsclib>
答案 0 :(得分:0)
@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q36630524.txt"
FOR /f "delims=" %%a IN ('FINDSTR /i /L /c:"<name>" "%filename1%"') DO SET "name=%%a"
SET "name=%name:*<name>=%"
FOR /f "delims=<" %%a IN ("%name%") DO set "name=%%a"
ECHO "%name%"
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
我使用了一个名为q36630524.txt
的文件,其中包含一些虚拟数据供我测试。
阅读文件,过滤包含字符串<name>
的唯一行并分配给name
。
将name
的任意部分(包括字符串<name>
,包括字符串findstr' to tokenise the resultant string using
)设置为 nothing
使用as a delimiter. Assign token1 to
&lt; (this will be the name part which precedes the string
名称class MyClass
{
public:
void hello();
};
显示结果。