如何用其子节点之一替换XML根节点?

时间:2014-06-25 11:28:56

标签: xml powershell

我想从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?

1 个答案:

答案 0 :(得分:1)

从XML对象中删除现有子元素并附加之前选择的节点,然后将修改后的XML对象写回文件:

...

$node = $xml.SelectSingleNode('/ns:root/ns:node1/ns:node2', $namespaceMgr)

$xml.RemoveAll()
$xml.AppendChild($node)

$xml.Save('C:\test.xml')