Powershell在多个节点中插入相同的属性

时间:2020-06-05 22:25:29

标签: xml powershell

在这个问题上我需要一些帮助。

我需要在xml文件的某些节点上插入属性。我的代码几乎允许我插入de属性,但不是全部。在此示例中,我有3个childNode,但是我的样本中有2、4甚至5个,结果是相同的。

我的xml的一部分:

  <WrittenResource>
    <ResourceLink>IVB1-20180808_01/IVB1-20180808_01_02ext.eaf</ResourceLink>  
  </WrittenResource>
  <WrittenResource>
    <ResourceLink>IVB1-20180808_01/IVB1-20180</ResourceLink>  
  </WrittenResource>
  <WrittenResource>
    <ResourceLink>IVB1-20180808_01</ResourceLink>  
  </WrittenResource>

我的代码:

   $xmlAtt1 = $xml.CreateAttribute("ArchiveHandle");
   $MediaColl=$xml.METATRANSCRIPT.Session.Resources.WrittenResource.ResourceLink
   Foreach($Media in $MediaColl) {$xml.DocumentElement.FirstChild.LastChild.LastChild.FirstChild.Attributes.Append($xmlAtt1)}

这是我一直的结果。我无法弄清楚,发生了什么。

 <WrittenResource>
 <ResourceLink ArchiveHandle"">IVB1-20180808_01/IVB1-20180808_01_02ext.eaf</ResourceLink>  
 </WrittenResource>
 <WrittenResource>
 <ResourceLink>IVB1-20180808_01/IVB1-20180</ResourceLink>  
 </WrittenResource>
 <WrittenResource>
 <ResourceLink ArchiveHandle"">IVB1-20180808_01</ResourceLink>  

再次感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

$targets = $xml.SelectNodes("//ResourceLink")
foreach($target in $targets) {
  $attrib = $target.OwnerDocument.CreateAttribute("ArchiveHandle")      
  $target.Attributes.Append($attrib)
}

输出:

<WrittenResource>
    <ResourceLink ArchiveHandle="">IVB1-20180808_01/IVB1-20180808_01_02ext.eaf</ResourceLink>
  </WrittenResource>
  <WrittenResource>
    <ResourceLink ArchiveHandle="">IVB1-20180808_01/IVB1-20180</ResourceLink>
  </WrittenResource>
  <WrittenResource>
    <ResourceLink ArchiveHandle="">IVB1-20180808_01</ResourceLink>
  </WrittenResource>