2016-07-18 14 views
0

XMLのリストを返して、それぞれに特定のノードが存在するかどうかを調べるのに問題があります。Powershell v2.0 - XMLノードを照会する

「パスワード」という特定のXMLノードを持っているか持っていない従業員ファイルのリストがあります。パスワードノードがXMLに存在する場合、それは新規従業員です。さもなければ、更新ノードになります。以下のスクリプトの試行では、同じ結果を返すだけで、テストのためにXMLのバリエーションがあることがわかります。

<?xml version="1.0"?> 
-<EnterpriseDocument CreationTimestamp="2016-07-18T09:44:39"> 
    -<BusinessUnitList> 
    -<BusinessUnit id="4086"> 
    -<User id="1234567" lastName="Sample" firstName="Sample" password="Password1234"> 
    </User> 
    </BusinessUnit> 
</BusinessUnitList> 

$Path = gc 'c:\temp\importexport\*.xml' 
Foreach ($xml in $Path) { 
    $xmldata = [xml]$xml 
    $Password = $XMLData.SelectSingleNode("//BusinessUnitList/BusinessUnit/User/Password") 
    If ($Password) 
     {Write-host "New Employee"} 
    Else 
     {write-host "Employee Update"} 
} 

私はバリエーションを試してみましたが、実験が、私は探しています混在結果を得るように見えることはできませんしています。私がここで間違っていることはありますか?

+0

あなたのXMLでは、 'password'がノードではない、それは属性です。 – Eris

答えて

0

Erisによると、passwordの値は要素/ノードではなく、という属性です。

あなたは二つのことをチェックしたいと思う - ノードが存在すること、および属性が存在していること:

if(($User = $XML.SelectSingleNode('//User')) -and $User.HasAttribute('password')) 
{ 
    Write-Host 'password found!' 
} 
else 
{ 
    Write-Host 'no password!' 
} 
+0

[System.Xml.XmlDocument]に、 'HasAttribute' *というメソッドが含まれていないため、メソッド呼び出しが失敗しました。 MSDNはHasAttributeをPowershellメソッドとして認識しません。 – JDGEEK

+0

これについて何か考えていますか? – JDGEEK

+0

@JDGEEKあなたは何をしていますか? 'SelectSingleNode()'は 'XmlDocument'オブジェクトを返しません。 –

関連する問題