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

时间:2018-02-27 14:40:21

标签: xml windows batch-file

我有以下名为" test.xml"

的XML文件

我怎样才能获得" Agent-name-8181818"价值来自" ragent-name"标记到批处理文件中的变量?

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

4 个答案:

答案 0 :(得分:2)

使用xpath.bat(不需要外部二进制文件,只使用内置的Windows功能):

call xpath test.xml "*//configuration-info/ragent-name"

将结果分配给变量:

for /f "tokens=* delims=" %%# in ('call xpath test.xml "*//configuration-info/ragent-name"') do set "reagent=%%#"

答案 1 :(得分:1)

xmlstarlet sel -t -v "//ragent-name/text()" file.xml

检查http://xmlstar.sourceforge.net/

答案 2 :(得分:1)

作为批处理文件行,

FOR /f "tokens=3delims=<>" %%a IN ('findstr "ragent-name" "q49011270.txt"') DO echo %%a

q49011270.txt是包含您数据的文件。

当然,您可以将结果分配给变量而不是echo ...

答案 3 :(得分:0)

您可以使用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 test.xml 是要处理的文件。
  • dummyVar 是必需变量。
  • / R 0,2 ragent-name 指定搜索&#34; ragent-name&#34;文件中的令牌,找到后,返回放在同一行(0)和2个令牌的令牌。
  • / D&#34;&lt;&gt;&#34; 表示令牌分隔符是&#34;&lt;&#34;和&#34;&gt;&#34;字符,除了空格和标签。

此方法允许以非常简单的方式从目标令牌中向上或向下,或向左或向右提取行中的令牌。唯一的不便是 dummyVar 变量保留在环境中,并且找到了令牌的值。

this post的进一步详情。