添加和删​​除子级

时间:2018-06-22 12:34:20

标签: xml powershell

我需要一些有关创建和禁止子节点的帮助:

我必须用OUT更新包含(OUTCOND)条件SIGN="+/-"的XML文件,并且作为新的规范化标准,我必须将带有SIGN="+"的XML文件放在带有SIGN="-"的人。

建议我创建具有与以前相同属性(实际上我只需要'NAME')的新属性,然后隐藏它们。这是我的(缩短的)PowerShell代码:

@(Select-Xml -Xml $dataXML -XPath "//OUTCOND[@SIGN=""+""]" | foreach {
    $_.Node
}) | foreach {
    $OUTNAMENODE = $_.NAME
    $OUTCONDNEW = $dataXML.CreateElement("OUTCOND") 
    $OUTCONDNEW.SetAttribute("NAME", "$OUTNAMENODE")
    $OUTCONDNEW.SetAttribute("ODATE", "ODAT")
    $OUTCONDNEW.SetAttribute("SIGN", "+")
    $_.ParentNode.AppendChild($OUTCONDNEW) | Out-Null

    $_.ParentNode.RemoveChild($_) | Out-Null
}

但是$OUTNAMENODE只给我返回一个名字(应该是〜20),而我现在不明白为什么这样做(我知道RemoveChild($_)必须进行顺时针修改)。

1 个答案:

答案 0 :(得分:0)

当我使用编写的示例XML数据对其进行测试时,您的代码对我有用。但是,我建议您进行一些简化,因为您似乎已经有了一个XML对象。以下应该将现有节点简单地移动到其父节点的末尾,而无需重新创建它们:

@($dataXML.SelectNodes("//OUTCOND[@SIGN='+']")) | ForEach-Object {
    $parent = $_.ParentNode
    $cutout = $parent.RemoveChild($_)
    $parent.AppendChild($cutout) | Out-Null
}

如果您仍然遇到问题,请使用示例输入以及该示例输入的期望输出和实际输出来更新您的问题。