xml - 如何根据键值删除特定节点?

标签 xml powershell

任务是根据键或值删除节点,例如,应删除键为“org.quartz.B”且值=“BBB”的整个条目。

<config>
 <module>
   <section name="java">
    <entry key="org.quartz.A" value="AAA" />
    <entry key="org.quartz.B" value="BBB" />
    <entry key="org.quartz.C" value="CCC" />
    <entry key="org.quartz.D" value="false" />
   </section>
    <section name="db">
    <entry key="oracle" value="12" />
    <entry key="mssql" value="2012" />
    <entry key="mysql" value="6.1" />       
   </section>
 </module>
</config>

我尝试过的代码是

$getxmlpath="C:\test.xml"
$xml=[xml](Get-Content $getxmlpath)
Write-Host ($xml)
$javasection = $xml.config.module | where-Object {$_.name -eq 'java'}
Write-Host ($javasection)
####### dont know how to delete particular node#######
$xml.Save($getxmlpath)

最佳答案

您可以使用RemoveChild XmlNode类的方法:

$childToRemove = $javaSection.entry | ? { $_.Key -eq 'org.quartz.B' }
$javaSection.RemoveChild($childToRemove)

请注意,使用此方法查找要删除的元素效率很低,因为它必须使用Where-Object cmdlet 过滤所有元素。如果您的 xml 很大,您可能需要考虑使用 XPath 表达式,方法如下:SelectSingleNode

关于xml - 如何根据键值删除特定节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35296658/

相关文章:

PowerShell 转换从函数返回的值。如何避免这种情况?

Powershell修改Web.config mailSettings

xml - 如何通过 XSD 中的模式定义 id 范围 (T1..T20)?

python - 生成 Django sitemap.xml : How to fix 'get_absolute_url' error

powershell - 如何使用单个PowerShell命令查看所有计算机级别的环境变量?

internet-explorer - 通过 PowerShell 在 Windows Server 上禁用 IE 安全性

powershell - 用特殊字符重命名CSV文件中的列标题

xml - 使用 XSL 将 xmlns 属性添加到 XML 文档时出现问题

xml - 使用 XDocument.Load 的多线程

xml - XMPP 中节 ID 的用途是什么?