我需要在根元素上添加一个属性,但在某些位置:
<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
找到的每个文件(。
希望这有帮助。