【问题标题】:Need to edit attribute value for a node in an xml file需要在 xml 文件中编辑节点的属性值
【发布时间】:2019-03-25 19:08:39
【问题描述】:

我正在尝试使用登录用户的 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: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

还尝试了以下方法:

$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>-

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

【问题讨论】:

  • 谢谢,修正了错字,但现在它返回以下错误:方法调用失败,因为 [System.String] 不包含名为“SetAttribute”的方法。在 D:\Python\a.ps1:5 char:1 + $node.SetAttribute("LastLoginUserName", "$user"); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound

标签: xml powershell


【解决方案1】:

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

/BootStrap/DataBaseAliases/LastLoginUserName 会像这样匹配 XML,

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

这不是示例中的内容。 LastLoginUserNameDatabaseAliases属性。将 XPath 更改为指向 DataBaseAliases 元素并设置其属性,如下所示:

$XPpath = "/BootStrap/DataBaseAliases"
$node = $XML.SelectNodes($XPpath)
$node | % { $_.SetAttribute("LastLoginUserName", $user) }
$XML.InnerXML

【讨论】:

  • 完美,就像一个魅力,感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多