需要编辑xml文件中节点的属性值
我试图用登录用户的id编辑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
$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