2012-10-23 7 views
6

Próbuję sprawdzić, czy dany węzeł istnieje, czy nie, jak poniżej.Jak sprawdzić, czy węzeł istnieje, czy nie używa powłoki powershell bez uzyskania wyjątku?

W moim pliku konfiguracyjnym znajduje się węzeł o nazwie client, może on być dostępny lub nie.

Jeśli nie jest dostępna, muszę ją dodać.

$xmldata = [xml](Get-Content $webConfig)  

     $xpath="//configuration/system.serviceModel"  
     $FullSearchStr= Select-XML -XML $xmldata -XPath $xpath 

If ($FullSearchStr -ne $null) { 

     #Add client node 
     $client = $xmldata.CreateElement('Client') 
     $client.set_InnerXML("$ClientNode") 
     $xmldata.configuration."system.serviceModel".AppendChild($client) 
     $xmldata.Save($webConfig) 

    } 

Sprawdzany warunek może zwrócić tablicę.

Chciałbym sprawdzić, czy węzeł klienta dostępny przed, czy nie?

Odpowiedz

4

Dlaczego nie można po prostu zrobić coś takiego:

$xmldata = [xml](Get-Content $webConfig)  
$FullSearchStr = $xmldata.configuration.'system.serviceModel'  
8

Można spróbować metody SelectSingleNode:

$client = $xmldata.SelectSingleNode('//configuration/system.serviceModel/Client') 

if(-not $client) 
{ 
    $client = $xmldata.CreateElement('Client') 
    ... 
} 
+0

Warunek się powiódł, nawet jeśli węzeł "klient" już istnieje – Samselvaprabu

+0

Jeśli ścieżka x jest przekazywana jako zmienna taka jak ta $ xpath = '// co nfiguration/system.serviceModel/client '\t \t $ client = $ xmldata.SelectSingleNode ($ xpath) nie powiedzie się, ale jeśli przekażę ścieżkę bezpośrednio, to działa poprawnie. Osobliwa logika !!! czego brakuje mi MVP? – Samselvaprabu

2

Można również użyć 'count' jak boolean

if ($xmldata.SelectSingleNode('//configuration/system.serviceModel/Client').Count) 
{ 
The count is 1 or more, so it exists 
} 
else 
{ 
The count is 0, so it doesn't exists 
} 
+0

To musi być opakowane, aby uzyskać liczbę. 'if (@ ($ xmldata.SelectSingleNode ('// configuration/system.serviceModel/Client')) .Zliczenie -gt 0)' – StingyJack

Powiązane problemy