PowerShell将XML属性添加到变量

时间:2014-10-29 12:03:45

标签: xml powershell

我有一个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的新手而失踪,但是我已经搜索了很长时间并且找不到任何有关此问题的具体内容。

谢谢,广告

2 个答案:

答案 0 :(得分:4)

您的代码存在以下问题:

  • 删除SelectNodes与左括号之间的空格。
  • 如果要在字符串中展开变量,请使用双引号。如果您只想传递变量,请完全删除引号。
  • 要在XML树中的任何位置选择节点,您需要在节点名前添加//。仅使用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