我有一个XML模式,我正在尝试将新节点插入:
<clusters>
<cluster>
<name>
cfcluster
</name>
<port>
45564
</port>
<sessionreplication>
true
</sessionreplication>
<server>
cfusion1
</server>
<server>
cfusion2
</server>
<stickysession>
true
</stickysession>
</cluster>
</clusters>
我正在尝试编写一个具有新服务器值的脚本,将针对现有服务器进行检查,然后在现有服务器之后插入新服务器(如果找不到)。比方说,我有一个新的服务器值cfusion3,我希望我的新输出最终像这样:
<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>
假设我将$ xml存储在$ clusterData中并且我要插入的新服务器存储在$ cfInstance.name中,我以为我会使用类似这样的东西,但是无法让它工作...... < / p>
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)
}
我很确定问题是$oldServer
正在获取所有<server>
个节点,而我不确定如何修改xpath
以获得一个节点。我试过了:
Select-Xml -Xml $clusterData -XPath "clusters/cluster/server[text()='cfusion2']"
但这不会返回任何东西。有什么建议吗?