我有我正在查询的XML文档。从下面的示例XML中,$Match = TRUE
当USER有密码时,AND STATUS =“a”和ACTION =“h”。这些都在相同的XML中。
<BusinessUnitList>
<User id="1407210" loginName="1407210" password="Password1" statusCode="a">
<WorkStatusList>
<WorkStatus start="2016-10-13" status="a" action="h" />
我可以查询一个或另一个属性:
$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"}
但我不知道如何将两者结合起来,以便当所有三个值存在和/或存在时条件仅为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 :(得分:0)
我喜欢将文档读入XML
对象以开始。这样您就不必多次迭代文件。然后,您可以在SelectNodes()
函数内部使用XPath表达式。只需-and
两个不同的SelectNode()
来电,即可获得结果。像这样:
$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