【问题标题】:How to parse a XML file with Command Line (cmd/batch)如何使用命令行 (cmd/batch) 解析 XML 文件
【发布时间】:2014-12-03 22:31:22
【问题描述】:

我有一个 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"

示例

输入:

 name=name1

返回:

 id=id1
 password=password1

【问题讨论】:

  • 像 shell 一样的 Unix* 可以吗?
  • Windows 批处理 (.cmd)
  • 几乎每个版本的 windows 都有 powershell.. 考虑用 powershell 代替吗?
  • @Vikas Gupta。是的,可以同时使用这两个选项。

标签: windows batch-file command-line xml-parsing


【解决方案1】:
@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(我认为是更好的选择)- 小脚本,它允许您通过 xpath 表达式获取 xml 值,而无需使用外部二进制文件:

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

【讨论】:

  • 正是我想要的...只是一个变化:tokens=3,9 应该是:tokens=7,9 因为我需要ID的值 谢谢!!!
  • 更改:set /p search_for=Enter name:,通过 set /p "search_for=Enter name:"。和 """%search_for%""", by "%search_for%"
【解决方案2】:

既然您指出(在问题的 cmets 中)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 ';'}

然后运行带参数的脚本得到输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多