2016-10-13 7 views
0

私は照会しているXML文書を持っています。下記のサンプルXMLから、USERがパスワードを持ち、STATUS = "a"かつACTION = "h"のときは$Match = TRUEです。これらはすべて同じXML内にあります。同じXMLで複数のXML属性を照会する

<BusinessUnitList> 
    <User id="1407210" loginName="1407210" password="Password1" statusCode="a"> 


<WorkStatusList> 
    <WorkStatus start="2016-10-13" status="a" action="h" /> 

私は1つのまたは他の属性を照会することができます

$Match = (gc "c:\file.xml | Select-Xml -XPATH "//User" | select -ExpandProperty node | where {$_.password}) 
$Match2 = (gc "c:\file.xml | Select-Xml -XPATH "//WorkStatus" | select -ExpandProperty node | where {$_.status -eq "a" -and $_.action -eq "h"} 

しかし、私はすべての3つの値が存在する場合の条件のみTRUEになるように、両者を結合する方法がわかりませんおよび/または存在する。

私はこのスクリプトを-andと組み合わせてみましたが、役に立たなかった。

$Match = (gc "c:\file.xml | Select-Xml -XPath "//User" | select -ExpandProperty node | where {$_.password}) -and 
     (gc "c:\file.xml | Select-Xml -XPath "//WorkStatus" | select -ExpandProperty node | where {$_.status -eq "a" -and $_.action -eq "h"}) 
+0

'$'は 'password'属性を含む' User'ノードを含んでいればtrueになります。ドキュメントに 'status =" a "と' action = "h" '属性を持つ' WorkStatus'ノードが含まれている場合、 '$ Match2'はtrueになります。少なくとも1つのそのような 'User'ノードと少なくとも1つの' WorkStatus'ノードを含む文書にフラグを立てようとしていますか? – djs

+0

XMLサンプルの階層を明確にしてください。 ''は ''の子ノードですか? ''の子ノードですか? ''と同じ階層レベルですか? –

+0

両方の条件が一致する必要があります。つまり、特定の値を満たすUser値とWorkStatus値です。 UserとWorkStatusの組み合わせは数多くありますので、興味のないものは除外しています。 – JDGEEK

答えて

0

私が開始するXMLオブジェクトにドキュメントを読むのが好き。そうすれば、ファイルを複数回反復する必要はありません。次に、SelectNodes()関数内のXPath式を使用できます。単に-andの2つの異なる呼び出しがあり、結果が得られます。同様に:

$xml = [XML] (gc c:\file.xml) 
$Match = $xml.SelectNodes("//WorkStatus[@status='a'and @action='h']").Count -gt 0 -and $xml.SelectNodes("//User[@password]").Count -gt 0 
+0

最高のおかげ - それ以来、私は同じ答えで他の答えを読んだことがあります。 – JDGEEK

関連する問題