需要编辑xml文件中节点的属性值

需要编辑xml文件中节点的属性值,xml,powershell,Xml,Powershell,我试图用登录用户的id编辑XML文件中的属性值 我试过: $user = $env:USERNAME $xml = [xml](Get-Content "D:\Python\prm.xml") $node = $xml.BootStrap.DataBaseAliases.LastLoginUserName $node.SetAttribute("LastLoginUserName", "$user"); 它返回一个错误: 不能对空值表达式调用方法。 位于D:\Python\a.ps1:5 ch

我试图用登录用户的id编辑XML文件中的属性值

我试过:

$user = $env:USERNAME
$xml = [xml](Get-Content "D:\Python\prm.xml")
$node = $xml.BootStrap.DataBaseAliases.LastLoginUserName
$node.SetAttribute("LastLoginUserName", "$user");
它返回一个错误: 不能对空值表达式调用方法。 位于D:\Python\a.ps1:5 char:1 +$node.SetAttribute(“LastLoginUserName”,“$user”); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:InvalidOperation:(:)[],运行时异常 +FullyQualifiedErrorId:InvokeMethodOnFull

还尝试了以下内容:

$user = $env:USERNAME
$FileLocation = "D:\Python\prm.xml"
$File = Get-Content $FileLocation
$XML = [XML]$File
$XPpath = "/BootStrap/DataBaseAliases/LastLoginUserName"
$node = $XML.SelectNodes($XPpath)
$node | % { $_.SetAttribute("attribute-1", "$user") }
$XML.OuterXml | Out-File $FileLocation
这不会返回任何错误,但xml保持不变。 XML内容如下:

<?xml version="1.0" encoding="utf-8"?><BootStrap MajorVersion="18" 
MinorVersion="8" PatchVersion="5" DeploymentVersion="0"><DataBaseAliases 
DefaultPMAlias="Corp_2016" LastLoginUserName="FOOUSER"><Alias>
<Name>PMDB</Name><AppType>Project Management</AppType><Connection> 
<DriverName>SQLServer</DriverName><BlobSize>-

项目管理
SQLServer-

我想用当前登录的用户替换FOOUSER。

XPath没有指向正确的元素,因此结果是一个空集。让我们看看原因

/BootStrap/databasealias/LastLoginUserName
会像这样匹配XML

<BootStrap>
  <DatabaseAliases>
    <LastLoginUserName />
  </DatabaseAliases>
</BootStrap>

谢谢,修复了输入错误,但现在它返回以下错误:方法调用失败,因为[System.String]不包含名为“SetAttribute”的方法。在D:\Python\a.ps1:5 char:1+$node.SetAttribute(“LastLoginUserName”,“$user”);+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~CategoryInfo:InvalidOperation:(:)[],RuntimeException+FullyQualifiedErrorId:MethodNotFoundperfect,非常有效,感谢您的帮助
$XPpath = "/BootStrap/DataBaseAliases"
$node = $XML.SelectNodes($XPpath)
$node | % { $_.SetAttribute("LastLoginUserName", $user) }
$XML.InnerXML