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)
Author by
user3759904
Updated on August 04, 2022Comments
-
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?