How to change the value of XML Element attribute using PowerShell?

58,444

Solution 1

Try the following:

$nodes = $xml.SelectNodes("/office/staff");
foreach($node in $nodes) {
    $node.SetAttribute("branch", "New York");
}

This will iterate through all nodes returned by SelectNodes() and modify each one.

Solution 2

You can access the attributes directly in the [xml] object like this:

# C:\temp> $xml = [xml](Get-Content C:\FE6Work.xml)
# C:\temp> $xml.office.staff

branch                   Type                           employee                                                             
------                   ----                           --------                                                             
Hanover                  sales                          {Tobias Weltner, Cofi Heidecke}                                      
London                   Technology                     {XXXX, Cofi}                                                         

# C:\temp> $xml.office.staff | foreach{$_.branch = "New York"}
# C:\temp> $xml.office.staff

branch                   Type                           employee                                                             
------                   ----                           --------                                                             
New York                 sales                          {Tobias Weltner, Cofi Heidecke}                                      
New York                 Technology                     {XXXX, Cofi}                                                         

Solution 3

if we are taking attribute from console and changing its value ?

$path=Read-Host -Prompt 'Enter path of xml file'
[xml]$xmldata = get-content "$path"

$tag = Read-Host -Prompt 'Enter tag'
$value = Read-Host -Prompt 'Enter value'
$xmldata.InstallConfig.$tag="$value"
$xmldata.Save($path)
Share:
58,444
user3759904
Author by

user3759904

Updated on August 04, 2022

Comments

  • user3759904
    user3759904 almost 2 years

    I am trying to access and change the particular attribute from XML tag

    XML:

    <office>
      <staff branch="Hanover" Type="sales">
        <employee>
            <Name>Tobias Weltner</Name>
            <function>management</function>
            <age>39</age>
        </employee>
        <employee>
            <Name>Cofi Heidecke</Name>
            <function>security</function>
            <age>4</age>
        </employee>
      </staff>
      <staff branch="London" Type="Technology">
       <employee>
        <Name>XXXX</Name>
        <function>gement</function>
        <age>39</age>
    

    From the above example I want to print branch attribute and then want to change it with one value such as New York in all the whole XML and using below code to do that

           $xml=New-Object XML
    
          $xml.Load("C:\FE6Work.xml")
    
          $node=$xml.SelectNodes("/office/staff")
    
          write-output $node.branch
          $node.branch="New York"
    

    But get an error stating can't find the element.

    Can someone please help?