我有一个具有以下结构的XML文件
<root>
<system name="Windows-32bit">
</system>
<system name="Windows-64bit">
</system>
<system name="AIX-32bit">
</system>
<system name="Linux-32bit">
</system>
</root>
并且我想在示例中向名称为“ Windiows-32bit”的系统节点插入一个值,以便该特定节点看起来像这样
<system name="Windows-32bit">
<file name="name1" md5="hash1" path="path1"/>
</system>
我知道我可以使用以下方法将其插入
$wc_config = New-Object System.Xml.XmlDocument
$wc_config.Load("PATH")
$child = $wc_config.CreateElement("file")
$child.SetAttribute("name", "asdf")
$child.SetAttribute("md5", "asdasdfasdff")
$child.SetAttribute("path", "PATH")
$wc_config.DocumentElement.AppendChild($child)
但这会在根目录内添加创建的子级。不是我想要的地方。如何在知道其名称和属性值的特定XML节点内创建子级?
答案 0 :(得分:0)
$wc_config.DocumentElement
是XML文档的根节点,因此显然在该节点上调用AppendChild()
会将新节点添加为根节点的子节点。要将新节点添加为其他节点的子节点,您需要在那个节点上调用AppendChild()
。
$parent = $wc_config.SelectSingleNode("//system[@name='Windows-32bit']")
$parent.AppendChild($child)
XPath expression //system[@name='Windows-32bit']
选择具有属性<system>
且值为“ Windows-32bit”的节点name
。