如何通过cmd / PowerShell读取xml值

时间:2015-05-06 11:21:49

标签: xml windows powershell cmd

我有以下XML格式

如何阅读Tar Path

的值
<?xml version="1.0" encoding="utf-8"?>
<Foo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Bar Path="c:\program files\bar" />
  <Tar Path="c:\program files\tar" Include="All" />
  <Updates></Updates>
</Foo>

在此示例中,我需要收到值:c:\program files\tar

根据Alex的评论,也可以在PowerShell脚本中执行此操作。

我需要将这段代码添加到现有的.cmd文件中,是否可以从.cmd调用PowerShell脚本并将结果返回给cmd?

3 个答案:

答案 0 :(得分:2)

PowerShell解决方案:

[xml]$xml = Get-Content $args[0]
$xml.Bar.Tar.Path

VBScript解决方案:

Set xml = CreateObject("Msxml2.DOMDocument.6.0")
xml.async = False
xml.load WScript.Arguments(0)

If xml.ParseError <> 0 Then
  WScript.Echo xml.ParseError.Reason
  WScript.Quit 1
End If

Set path = xml.SelectSingleNode("/Tar/Bar[@Path]")
WScript.Echo path.Value

在批处理文件中调用上述脚本,如下所示:

powershell -File "C:\path\to\your.ps1" "C:\path\to\your.xml"

或者像这样:

cscript //NoLogo "C:\path\to\your.vbs" "C:\path\to\your.xml"

PowerShell和VBScript都将结果写入STDOUT。要将其分配回批处理变量,您需要像这样的for循环(用以上命令之一替换省略号):

for /f "tokens=*" %%p in ('...') do set pathvalue=%%p

答案 1 :(得分:0)

您可以使用Xidel

FOR /F "delims=" %%A IN ('xidel.exe -s "C:\path\to\your.xml" -e "pathvalue:=//Tar!@Path" --output-format^=cmd') DO %%A
ECHO %pathvalue%

答案 2 :(得分:0)

在同一.bat文件中使用powershell咨询xml

SET ARXIU=c:\catalunya.xml
FOR /F "tokens=* USEBACKQ" %%F IN (`powershell "[xml]$xml = Get-Content %ARXIU% ; $xml.Foo.Tar.Path"`) DO (
     SET RUTA=%%F
     GOTO HAVE_VALUE
)
echo Error NOT have value
GOTO :EOF

:HAVE_VALUE
echo %RUTA%