我需要读取几个XML文件,并从节点值设置变量数据。
示例XML:
<Objs Version="1.1.0.1"
xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.__ComObject#{86fd1ebe-92e2-40f3-9c03-e5f0ca55f8ab}</T>
<T>System.__ComObject</T>
<T>System.MarshalByRefObject</T>
<T>System.Object</T>
</TN>
<ToString>System.__ComObject</ToString>
<Props>
<S N="Name">copy1234</S>
</Props>
我正在编写的脚本必须读取文件并将值“copy1234”转换为变量。我很糟糕,所以它只返回NULL ......
Get-ChildItem $ImportFolderPath -Filter *.xml | Foreach-Object {
$currentFile = $_.FullName
Write-Host "Processing file: $currentfile"
[xml]$ccXML = Get-content $currentFile
$ccName = Select-Xml -Path $currentfile -Xpath '//objs/obj/props/S[@N="Name"]'
Write-Host "Name of node: $ccName"
答案 0 :(得分:0)
您错过了 XPath区分大小写这一事实 所以表达式应该是
$ccName = Select-Xml -Path $currentfile -Xpath '//Objs/Obj/Props/S[@N="Name"]'
如果Objs
是您的根元素,您甚至可以通过省略//
(文档中的任何位置)并使用/
(相对于根元素)来简化/优化此元素:< / p>
$ccName = Select-Xml -Path $currentfile -Xpath '/Objs/Obj/Props/S[@N="Name"]'