I have an XML schema that I'm trying to insert new nodes into:
<clusters> <cluster> <name> cfcluster </name> <port> 45564 </port> <sessionreplication> true </sessionreplication> <server> cfusion1 </server> <server> cfusion2 </server> <stickysession> true </stickysession> </cluster> </clusters> I'm trying to write a script that has a new sever value, will check it against existing ones, then insert the new one after existing ones if it isn't found. Say for example I have a new server value cfusion3, I'd want my new output to end up like this:
<clusters> <cluster> <name> cfcluster </name> <port> 45564 </port> <sessionreplication> true </sessionreplication> <server> cfusion1 </server> <server> cfusion2 </server> <server> cfusion3 </server> <stickysession> true </stickysession> </cluster> </clusters> Assuming I have the xml stored in $clusterData and the new server I want to insert is stored in $cfInstance.name, I was thinking I'd use something like this, but can't get it working...
if (-not ($clusterData.clusters.cluster.server -match $cfInstance.name)) { $oldServer = ($clusterData | Select-Xml '/clusters/cluster/server').get_node() $newServer = $clusterData.CreateElement("server") $newServer.InnerText = $cfInstance.name $clusterData.InsertAfter($newServer, $oldServer) } I'm pretty sure the problem is that $oldServer is getting all nodes and I'm not sure how to modify the xpath to get just one. I've tried Select-Xml -Xml $clusterData -XPath "clusters/cluster/server[text()='cfusion2']", but that doesn't return anything. Any suggestions?
No comments:
Post a Comment