我有一个 XML 文件,其中包含<Notes>
我想要删除的节点。
<APPOrganisationUnits>
<APPOrganisationUnitsRow num="1">
<OrganisationId>TEST1</OrganisationId>
<APPContactDetails>
<APPContactDetailsRow num="1">
<Notes>Notes 1</Notes>
</APPContactDetailsRow>
<APPContactDetailsRow num="2">
<Notes>Notes 2</Notes>
</APPContactDetailsRow>
<APPContactDetailsRow num="3">
<Notes>Notes 3</Notes>
</APPContactDetailsRow>
</APPContactDetails>
</APPOrganisationUnitsRow>
<APPOrganisationUnitsRow num="2">
<OrganisationId>TEST2</OrganisationId>
<APPContactDetails>
<APPContactDetailsRow num="1">
<Notes>Notes 1</Notes>
</APPContactDetailsRow>
<APPContactDetailsRow num="2">
<Notes>Notes 2</Notes>
</APPContactDetailsRow>
</APPContactDetails>
</APPOrganisationUnitsRow>
</APPOrganisationUnits>
对于每个实例<notes>
节点我只想删除它。我的代码可以运行但不会删除节点。
$XMLFile = "$Provider_Root\Processing\small.xml"
$xml = [xml](Get-Content $XMLFile)
foreach ($APPContactDetailsRow in $xml.APPOrganisationUnits.APPOrganisationUnitsRow.APPContactDetails) {
if ($APPContactDetailsRow.Item('Notes')) {
$APPContactDetailsRow.RemoveChild($_)
}
}
$xml.Save($XMLFile)
}
当前对象变量($_
) 未填充在循环上下文中。您需要先将子节点放入变量中,然后才能将其删除。另外,仅仅因为您在特定类型的节点之后命名变量,并不会通过该变量自动枚举节点。您需要实际扩展节点。
改变这个:
foreach ($APPContactDetailsRow in $xml.APPOrganisationUnits.APPOrganisationUnitsRow.APPContactDetails) {
if ($APPContactDetailsRow.Item('Notes')) {
$APPContactDetailsRow.RemoveChild($_)
}
}
进入这个:
foreach ($APPContactDetailsRow in $xml.APPOrganisationUnits.APPOrganisationUnitsRow.APPContactDetails.APPContactDetailsRow) {
$n = $APPContactDetailsRow.Item('Notes')
if ($n) {
$APPContactDetailsRow.RemoveChild($n)
}
}
话虽如此,选择具有以下属性的节点可能会更简单XPath 表达式 http://saxon.sourceforge.net/saxon6.5.3/expressions.html并使用管道删除它们:
$xml.SelectNodes('//AppContactDetailsRow/Notes') | ForEach-Object {
$_.ParentNode.RemoveChild($_)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)