批处理-从XML文件获取标记值

批处理-从XML文件获取标记值,xml,windows,batch-file,Xml,Windows,Batch File,我有一个名为“test.XML”的XML文件 如何将“ragent name”标记中的“Agent-name-818”值放入批处理文件中的变量中 <ragent> <type>ragent</type> <logger> <loglevel>log_warning</loglevel> <logger-dir>.</logger-dir> <

我有一个名为“test.XML”的XML文件

如何将“ragent name”标记中的“Agent-name-818”值放入批处理文件中的变量中

<ragent>
    <type>ragent</type>
    <logger>
        <loglevel>log_warning</loglevel>
        <logger-dir>.</logger-dir>
    </logger>
    <additional-config>
        <logger-level>log_warning</logger-level>
    </additional-config>
    <configuration-info ts="26-02-2018_15-31-54">
        <apply-config-now>false</apply-config-now>
        <manual-settings-activation>Automatic</manual-settings-activation>
        <ragent-name ts="26-02-2018_15-31-54">Agent-name-8181818</ragent-name>
        <site ts="26-02-2018_15-31-54">site</site>
    </configuration-info>
</ragent>

拉根
日志警告
.
日志警告
假的
自动的
代理-name-818
网站
检查(不需要外部二进制文件,只使用内置的windows功能):

要将结果指定给变量,请执行以下操作:

for /f "tokens=* delims=" %%# in ('call xpath test.xml "*//configuration-info/ragent-name"') do set "reagent=%%#"
作为批处理文件行

FOR /f "tokens=3delims=<>" %%a IN ('findstr "ragent-name" "q49011270.txt"') DO echo %%a
FOR/f“tokens=3delims=“%%a IN('findstr“ragent name”“q49011270.txt”)DO echo%%a
其中
q49011270.txt
是包含数据的文件


当然,您可以将结果分配给一个变量,而不是
echo
ing它…

您可以使用SETX命令的查找功能来解决此问题和其他类似问题:

for /F "tokens=3" %%a in ('setx /F test.xml dummyVar /R 0^,2 ragent-name /D "<>"') do set "ragent=%%a" & goto continue
:continue
echo %ragent:~0,-1%
对于('setx/F test.xml dummyVar/R 0^,2 ragent name/D'')中的/F“tokens=3”%%a,请设置“ragent=%%a”&继续
:继续
回音%ragent:~0,-1%
在此命令中:

setx /F test.xml dummyVar /R 0^,2 ragent-name /D "<>"
setx/F test.xml dummyVar/R 0^,2 ragent name/D“”
  • /F test.xml是要处理的文件
  • dummyVar是必需的变量
  • /R 0,2 ragent name指定在文件中搜索“ragent name”标记,找到后,返回放置在同一行(0)中的标记和右侧的2个标记
  • /D”“指示标记分隔符是“”字符,除了空格和制表符之外
此方法允许以非常简单的方式从目标令牌中提取位于上方或下方、左侧或右侧行中的令牌。唯一的不便之处是,dummyVar变量保留在环境中,并且找到了标记的值


更多详细信息,请参见。

xmllint
替换为
xmlstarlet
(可在windows上使用)。不幸的是,我在批处理文件中使用xmlstarlet时遇到了困难,尤其是当xml文件具有命名空间时。更好的选择是使用Jscript、Vbscript或Powershell。它们都具有读取和写入xml文件的本机功能。下面发布的
xpath.bat
程序实际上是一个混合批处理文件,它调用jscript来完成它的工作。@Squashman你能举个例子吗?
for /F "tokens=3" %%a in ('setx /F test.xml dummyVar /R 0^,2 ragent-name /D "<>"') do set "ragent=%%a" & goto continue
:continue
echo %ragent:~0,-1%
setx /F test.xml dummyVar /R 0^,2 ragent-name /D "<>"