我有一个XML文件,想要使用PowerShell根据变量搜索节点,然后将该属性设置为另一个我可以使用的变量。
我的XML保存在C:\ example.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<Portal>
<A23062013 Current="13" lastweek="12" />
<A24062013 Current="13" lastweek="12" />
</Portal>
Portal节点中的XML节点的内容实际上是ddMMyyy格式的日期,这些日期的前缀为A。
我的Powershell代码如下:
$date = (Get-Date).AddDays(-1).ToString('ddMMyyyy')
$pre = "A"
$completedate = "$pre$date"
[xml] $file = get-content "C:\example.xml"
$xmlValuePrevious = $file.SelectNodes ('$completedate') | select lastweek
$xmlValueCurrent = $file.SelectNodes ('$completedate') | select Current
Write-Host "$xmlValuePrevious $xmlValueCurrent"
它当前会引发第5行和第6行的错误,这些错误表示:
意外的令牌&#39;(&#39;在表达式或陈述中。
我可能很容易因为我是PS的新手而失踪,但是我已经搜索了很长时间并且找不到任何有关此问题的具体内容。
谢谢,广告
答案 0 :(得分:4)
您的代码存在以下问题:
SelectNodes
与左括号之间的空格。//
。仅使用XPath表达式中的节点名称将仅选择当前节点中具有该名称的节点。改变这个:
$xmlValuePrevious = $file.SelectNodes ('$completedate') | select lastweek
$xmlValueCurrent = $file.SelectNodes ('$completedate') | select Current
进入这个:
$xmlValuePrevious = $file.SelectNodes("//$completedate") | select lastweek
$xmlValueCurrent = $file.SelectNodes("//$completedate") | select Current
答案 1 :(得分:3)
因为Ansgar已经解释了你的代码的问题是什么,我不会进入那个。
要访问xml结构,你也可以使用点符号(这对初学者来说有点容易):
$xmlValuePrevious = $file.Portal.$completedate.lastweek
$xmlValueCurrent = $file.Portal.$completedate.current