PowerShell将XML属性添加到变量

PowerShell将XML属性添加到变量,xml,powershell,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" /> </Porta

我有一个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>
$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行抛出错误,其中指出:

表达式或语句中出现意外标记“(”

可能是因为我是PS新手,所以错过了一些简单的东西,但我已经搜索了很多年,找不到关于这个问题的任何具体信息


谢谢,Ad

您的代码有几个问题:

  • 删除
    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

您的代码有几个问题:

  • 删除
    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

既然Ansgar allready解释了你的代码的问题是什么,我就不谈了

对于访问xml结构,您也可以使用点表示法(这对初学者来说比较容易):


既然Ansgar allready解释了你的代码的问题是什么,我就不谈了

对于访问xml结构,您也可以使用点表示法(这对初学者来说比较容易):


非常好,非常感谢Ansgar,非常感谢。但是,当我现在运行它时,变量返回为{lastweek=30}和{Current=31}我是否能够更改它,使我返回的是30和31,请?@ladders81您应该能够选择像这样的值
$xmlValueCurrent.Current
(您有一个哈希表)@ladders81扩展属性值:
。| select-Expand lastweek
非常好,非常感谢Ansgar,非常感谢。但是,当我现在运行它时,变量返回为{lastweek=30}和{Current=31}我是否可以更改它,使我得到的全部是30和31,请?@ladders81您应该能够选择如下值
$xmlValueCurrent.Current
(您有一个哈希表)@ladders81展开属性的值:
。|选择-Expand lastweek
谢谢Paul,当我现在运行它时,变量返回为{lastweek=30}和{Current=31}我能改变它,让我得到的是30和31吗?@ladders81这应该直接返回值,而不是哈希表,你使用的是什么版本的powershell?关于访问值的理论,请参阅我对你在ansgars PostThank Paul上的评论的回答,当我现在运行它时,变量返回为{lastweek=30},并且@{Current=31}我能改变它,让我得到的是30和31吗?@ladders81这应该直接返回值,而不是哈希表,你使用的是什么版本的powershell?关于访问值的理论,请参阅我对你在ansgars帖子上评论的回答