【问题标题】:PowerShell Insert xml node at the topPowerShell 在顶部插入 xml 节点
【发布时间】:2021-08-03 20:21:29
【问题描述】:

我想在其他现有子节点的顶部插入一个 xml 节点。

我的代码的问题是它附加到了底部。

我尝试了InsertBefore(),但我不断收到错误

例如:

<Providers>
               <----I want to insert a provider here
  <provider>
    <id>87585857587</id>
    <type>AD</type>
    <name>Demo1</name>
    <event>saga</event>
    <username></username>
    <item>NEV</item>
    <password></password>
  </provider>
</Providers>

我的代码:

    $varGorup = @{"type"="AD";"name"="DEMO";"event"="DNS";"username"="user1";"item"="store";"password"="password1";}

    $file = [XML](Get-Content $xmlFile)

    $providerNode = $file.providers.AppendChild($file.CreateElement("provider"))

    $varGorup | % getEnumerator | % {
     
        $childNode = $providerNode.AppendChild($file.CreateElement($_.key))
        $childNode.AppendChild($file.CreateTextNode($_.value)) | Out-Null
    }
    
    $file.save($xmlFile)

我试过了:

   $file =  [XML](Get-Content $xmlFile) 

    $providers = $file.SelectSingleNode('/providers') 

    $provider  = $file.CreateElement("provider")

    $file.InsertBefore($provider,$providers)

但得到这个错误

Exception calling "InsertBefore" with "2" argument(s): "This document already has a 'DocumentElement' node."

【问题讨论】:

    标签: xml windows powershell xml-parsing


    【解决方案1】:

    使用语法 InsertBefore:

    $xmlfile ="C:\test.xml"
    $xml = [XML](Get-Content $xmlFile)
    
    $varGorup = @{"type"="AD";"name"="DEMO";"event"="DNS";"username"="user1";"item"="store";"password"="password1";}
    
    #calcul the number of node, if total is 0 do an AppendChild, else do that
    $total = $xml.Providers.ChildNodes.Count
            
    if($total -eq 0){
         $providerNode = $file.providers.AppendChild($xml.CreateElement("provider"))      
    } else{
        $providerNode = $xml.providers.InsertBefore($xml.CreateElement("provider"), $xml.Providers.ChildNodes[0])
    }
    
    $varGorup | % getEnumerator | % {
         
            $childNode = $providerNode.AppendChild($xml.CreateElement($_.key))
            $childNode.AppendChild($xml.CreateTextNode($_.value)) | Out-Null
        }
     $xml.save($xmlFile)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 2012-05-21
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多