将XML元素节点转换为子节点

时间:2015-07-08 18:39:00

标签: xml powershell

我想知道如何在PowerShell中更改XML节点的级别。

例如,从中:

<root>
    <parent>
        <child>One</child>
        <child>Two</child>
        <child>Three</child>
        <child>Four</child>
        <child>Five</child>
        <child>six</child>
    </parent>
</root>

到此:

<root>
    <parent>
        <child>
            <grandchild>Two</grandchild>
            <grandchild>Three</grandchild>
            <grandchild>Four</grandchild>
            <grandchild>Five</grandchild>
            <grandchild>six</grandchild>
        </child>
    </parent>
</root>

另外,偏离主题,但是命令行开关Out-Null是否只忽略输出?它似乎也忽略了我的脚本结果。我正在创建并写入文件,当我尝试打开文件时,我被告知它不存在。但是,当我不忽略输出时,它会成功创建并写入文件,但需要更长的时间。

1 个答案:

答案 0 :(得分:0)

  1. 创建一个新的(空)<child>节点。
  2. 使用<grandchild>节点的内容创建新的<child>节点。
  3. <grandchild>个节点附加到新的<child>节点。
  4. 删除现有的<child>个节点。
  5. <child>节点附加到<parent>节点。
  6. 示例代码:

    [xml]$xml = '<root>...</root>'
    
    $child = $xml.CreateElement('child')
    
    $xml.SelectNodes('//child') | % {
      $n = $xml.CreateElement('grandchild')
      $n.InnerText = $_.InnerText
      $child.AppendChild($n)
    
      [void]$_.ParentNode.RemoveChild($_)
    }
    
    $xml.SelectNodes('//parent').AppendChild($child)
    

    至于Out-Null:cmdlet会丢弃success output stream上的所有输出。