首先,请允许我提及我是PowerShell的初学者,并感谢大家的提前帮助
我在PowerShell脚本中有一个函数,它使用
创建大量新的XML节点$fileElement = $xml.CreateElement("FileRef")
$fileElement.SetAttribute("Id",$refId)
这很好用,所以我有几个名为FileRef的节点兄弟,每个节点都有不同的Id属性。 $ fileElement变量稍后在脚本中再次使用,它使用$ fileElement.AppendChild添加它自己的子节点。
我现在有这样的情况,我有一个循环调用脚本函数多次传入相同的$ refId变量。我遇到的问题是输出正在获得具有相同ID的重复FileRef节点兄弟。
在某些情况下,我想要做的是从现有的FileRef节点兄弟创建$ fileElement变量,其中id = $ refId(以便我以后仍然可以在脚本中对变量使用AppendChild)使用id = $ refId创建一个新的XML节点兄弟(导致重复)。 E.g。
if(circumstances)
{
# first call to the function in the loop, so create new node sibling
$fileElement = $xml.CreateElement("FileRef")
$fileElement.SetAttribute("Id",$refId)
}
else
{
# node sibling already exists, do not create new node,
# use existing node sibling with id = $refId
create xml node variable $fileElement here
}
由于
答案 0 :(得分:0)
好的,我已成功使用以下PowerShell代码解决了我的问题:
if(circumstances)
{
$fileElement = $xml.CreateElement("fileRef")
$directoryRefElement.SetAttribute("Id",$refId)
}
else # use existing node
{
$fileElement = ""
$currentNode = $xml.get_Item("fileRef")
do
{
$currentId = $currentNode.GetAttribute("Id")
if ($currentId -eq $refId)
{
$fileElement = $currentNode
}
else
{
$tempNode = $currentNode
$currentNode = $tempNode.get_NextSibling()
}
}
while($fileElement -eq "")
}
当我需要找到一个现有的节点兄弟时,我得到了我正在寻找的第一个节点,并根据传入的$ refId检查它的Id属性。如果它们不匹配,我将查看下一个兄弟,依此类推,直到2个ID匹配。
虽然这可能不是实现我的目标的最优雅方式,但它确实有效: - )