2

I have got a xml file and would like to if part of a line in the xml matches a string replace part of that line of xml. I do believe it is probabily pretty simple but really cannot work out how to do it. Below I am showing a very small snippet of the XML but it should be enough to understand wht I am trying to do

<?xml version="1.0" encoding="utf-8"?>
<Server ObjId="SERVER01" Version="1123" AreaOfResponsibility="Area2" AreaCode="ODA">
  <SubSystems>
    <SubSystem ObjId="SS001" IPAddressA="192.168.103.16" IPAPort="0" IPAddressB="192.168.103.16" IPBPort="0">

What I want to do is when ObjId="SS001" replace IPAPort="0" with IPAPort="2115" in the XML and save it. Intially the way I was doing it was by hardcoding as seen below and this just is not scalable. What I would like is for when ObjId="" = a variable replace IPAPort="0" with IPAPort="$AnotherVariable" but without having to have the long replace parameters I currently have

[XML]$Con = Get-Content Path\To\XML
$Con | % { $_.Replace('ObjId="SS001" IPAddressA="192.168.103.16" IPAPort="0" IPAddressB="192.168.103.16" IPBPort="0"', 'ObjId="SS001" IPAddressA="192.168.103.16" IPAPort="2115" IPAddressB="192.168.103.16" IPBPort="0"')} | Set-Content $MT700XMLPath

Basically I just want a neater way of writing this

1 Answer 1

5

Use XPath to locate the relevant node(s), then modify them and save the [xml] doc:

$file = Get-Item Path\to\file.xml
[xml]$con = $file |Get-Content

# Discover relevant nodes with xpath query
foreach($node in $con.SelectNodes('//SubSystem[@ObjId="SS001"]')){
  # update the IPAPort attribtue value
  $node.SetAttribute('IPAPort', '2115')
}

# save document
$con.Save($file.FullName)
Sign up to request clarification or add additional context in comments.

1 Comment

Does the "$" in [$xml] on line 2 need to be there?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.