我想从XML文档中删除一些父节点,但保留子节点。例如:
我有这个结构:
<?xml version="1.0"?>
<ns:root xmlns:ns="ns">
<ns:node1>
<ns:node2>
<ns:node3>
</ns:node3>
<ns:node4>
</ns:node4>
</ns:node2>
</ns:node1>
</ns:root>
想要得到这个:
<?xml version="1.0"?>
<ns:node2 xmlns:ns="ns"> <!-- new root -->
<ns:node3>
</ns:node3>
<ns:node4>
</ns:node4>
</ns:node2>
我当前的脚本如下所示:
# Get the content as xml
$xml = [xml] (gc c:\test.xml)
# Grab the namespace
$namespaceMgr = New-Object System.Xml.XmlNamespaceManager $xml.NameTable
$namespace = $xml.DocumentElement.NamespaceURI
$namespaceMgr.AddNamespace("ns", $namespace)
# Select node2
$xml.SelectSingleNode('/ns:root/ns:node1/ns:node2', $namespaceMgr)
# How to save it now as a new valid xml file?
答案 0 :(得分:1)
从XML对象中删除现有子元素并附加之前选择的节点,然后将修改后的XML对象写回文件:
...
$node = $xml.SelectSingleNode('/ns:root/ns:node1/ns:node2', $namespaceMgr)
$xml.RemoveAll()
$xml.AppendChild($node)
$xml.Save('C:\test.xml')