如何使用命令行解析XML文件(cmd / batch)

问题描述 投票:4回答:2

我有一个XML文件Testing.Config,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<connectionStrings>
    <add name="name1" connectionString="user id=id1;password=password1;"/>
    <add name="name2" connectionString="user id=id2;password=password2;"/>
    <add name="name3" connectionString="user id=id3;password=password3;"/>
</connectionStrings>

我需要解析此文件并获取由提供的属性标识的特定标记的属性中的idpassword键值对,例如"name=name1"

Example

输入:

 name=name1

返回:

 id=id1
 password=password1
windows batch-file command-line xml-parsing
2个回答
4
投票
@echo off

set "xml_file=test.xml"
set /p search_for=Enter name:

for /f "skip=2 tokens=3,9 delims=;= " %%a in ('find """%search_for%""" "%xml_file%"') do (

    set "name=%%~a"
    set "pass=%%b"
)

echo name : %name%
echo pass : %pass%

如果所有connectionStrings都在分隔的行上,并且每个字符串都在一行上。更改xml_file的位置


您还可以尝试使用xpath.bat(根据我的更好选项)-small脚本,它允许您通过xpath表达式获取xml值,而无需使用外部二进制文件:

call xpath.bat connection.xml "//add[@name = 'name1']/@connectionString"

1
投票

既然你指出(在问题的评论中)powershell也没关系,请将以下代码放在脚本文件中(比方说Foo.ps1

param
(
    [Parameter(Mandatory=$true)]
    [string] $ConfigFilePath,

    [Parameter(Mandatory=$true)]
    [string] $Name
)

([xml](Get-Content -LiteralPath $ConfigFilePath)).connectionStrings.add |
Where-Object {$_.name -eq $name} |
ForEach-Object {($_.connectionString -split ' ')[1] -split ';'}

然后使用参数运行脚本以获取输出。

© www.soinside.com 2019 - 2024. All rights reserved.