Powershell 在 xml 定义的位置上追加 () 属性



我需要在根元素上添加一个属性,但在某些位置:

<METATRANSCRIPT xmlns="http://www.mpi.nl/IMDI/Schema/IMDI" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
Date="2016-01-29" FormatId="IMDI 3.03" Originator="" Type="SESSION" 
Version="0" 
xsi:schemaLocation="http://www.mpi.nl/IMDI/Schema/IMDI ./IMDI_3.0.xsd" 
ArchiveHandle="">

属性ArchiveHandle=""需要保持在xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"Date="2016-01-29"之间。

如何解决此问题,并将属性放在正确的位置?

这是我的代码:

Get-ChildItem -Path 'PathToXMLFiles' -Recurse -Include "*.imdi" -File | ForEach-Object
{
[xml]$xml = Get-Content $_.FullName; 
$xml= $xml.METATRANSCRIPT.OuterXml;
$xmlAtt = $xml.CreateAttribute("ArchiveHandle")
$xsi= $xml.DocumentElement.xsi
$xmlAttRef = $xml.DocumentElement.Attributes.Append($xmlAtt)
$xml.Save($_.FullName)
}

感谢您的任何帮助

正如您所发现的,Attributes.Append方法将始终在末尾附加新属性。 因此,您真正想要使用的是Attributes.InsertBefore方法或Attributes.InsertAfter方法。

例如:

Get-ChildItem -Path 'PathToXMLFiles' -Recurse -Include '*.imdi' -File | ForEach-Object {
[xml]$xml = Get-Content -Path $_.FullName
if ($xml.METATRANSCRIPT.HasAttribute('ArchiveHandle'))
{
$xml.METATRANSCRIPT.RemoveAttribute('ArchiveHandle')
}
$ah = $xml.CreateAttribute('ArchiveHandle')
$dt = $xml.METATRANSCRIPT.Attributes.GetNamedItem('Date')
$ah = $xml.METATRANSCRIPT.Attributes.InsertBefore($ah, $dt)
$xml.Save($_.FullName)
}

在上面的代码段中,我明确删除了任何预先存在的ArchiveHandle属性。 然后,在创建一个新的ArchiveHandle属性后,我得到我要插入新属性之前的项目的XmlAttribute(例如,Date(,然后相应地调用Attributes.InsertBefore方法。 我可以很容易地选择xmlns:xsi然后称为Attributes.InsertAfter方法。 最后,我保存生成的 XML(对于Get-ChildItem找到的每个文件(。

希望这有帮助。

相关内容

  • 没有找到相关文章