繁体   English   中英

使用Windows Batch读取XML文件

[英]Read XML file with windows batch

我正在尝试读取xml文件,并从XML文件中读取构建标记之间的STRING“ 50”。 我试过了,但是没有任何输出。

XML文件。

    <?xml version="1.0" encoding="UTF-8"?>
    <CDMDataXML xmlns="http://www.avocent.org/trellis/CDMLoaderXMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.avocent.org/trellis/CDMLoaderXMLSchema CDMLoaderXMLSchema.xsd">
<CDMDataVersion>
    <Major>1</Major>
    <Minor>0</Minor>
    <Build>50</Build>
    <Delimiter>.</Delimiter>
</CDMDataVersion>

批处理文件代码。

@ECHO OFF
SETLOCAL
SET "build="&SET "grab="
FOR /f "tokens=*" %%a IN (version.xml) DO (
IF DEFINED grab SET build=%%a&SET "grab="
IF /i "%%a"=="<BUILD>" SET grab=Y
)
ECHO found build=%build%
GOTO :EOF

如果xml文件和批处理文件位于同一文件夹中,并且我从cmd执行批处理文件,代码将运行吗???

编辑1:

@MC ND我进行了您提到的更改并运行了代码。当我按Enter键时,光标移至下一行并卡在了那里。我也没有任何输出。 我也无法关闭cmd窗口。 所有这些都在下面的图像文件中说明。

文件

回答

正如下面的MCND所建议的,我将文件重命名为findx.bat,它返回的值是我想要的值“ 50”。正确输出的屏幕截图如下。

安斯

非常感谢@MCND!

仅检索所需的行( find ),并使用指定的定界符( <> )将该行标记化以检索所需的信息

     delims:    v     v  v      v
     line  :    <Build>50</Build>
     tokens:^1   ^2    ^3 ^4

现在,将其翻译成代码

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "build="
    for /f "tokens=3 delims=<>" %%a in (
        'find /i "<Build>" ^< "file.xml"'
    ) do set "build=%%a"

    echo %build%

...我确定您知道用批处理解析XML可能不是最容易/最聪明的事情。 诸如xmlstarlet和xidel之类的工具更适合于此:

xidel -q file.xml -e //build

...将内部版本号保存在变量X中并输出:

@echo off
for /f "delims=" %%a in ('xidel -q --output-format cmd file.xml -e "x:=//build"') do %%a
echo Build version = %x%

...如果BeniBela(xidel编码器)可以对以下内容进行编程以直接设置环境变量而不生成输出的set命令,那就更好了。 那将非常强大(而且简短)。 贝尼? 你准备好了吗? :-)

xidel -q -cmd file.xml -e x:=//build

您可以尝试xpath.bat-可以通过给定xpath从xml文件获取值的脚本:

call xpath.bat "build.xml" "\\build"

此术语不会触发,因为%%a不会仅仅是<BUILD>

"%%a"=="<BUILD>" 

将此行添加到FOR行之后的代码中,然后运行它以显示正在发生的情况:

echo "%%a"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM