通过属性名称

时间:2019-08-08 06:50:17

标签: xml powershell

我有一个具有以下结构的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节点内创建子级?

1 个答案:

答案 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