PowerShell - 从现有XML节点兄弟创建变量

时间:2011-08-25 14:30:58

标签: xml powershell

首先,请允许我提及我是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
}

由于

1 个答案:

答案 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匹配。

虽然这可能不是实现我的目标的最优雅方式,但它确实有效: - )