Powershell v2.0 - 查询XML节点

时间:2016-07-18 16:15:36

标签: xml powershell selectsinglenode

我在尝试返回XML列表并确定每个XML是否存在特定节点时遇到了问题。

我们有一个Employee文件列表,它们有或没有名为Password的特定XML节点。如果XML中存在Password节点,则它是New Employee,否则它将是Update。在我下面的脚本尝试中,它似乎只返回相同的结果,因为知道有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"}
}

我尝试过变化和实验,但似乎无法获得我想要的混合结果。我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

如Eris所述,password值不是元素/节点,而是属性

您需要检查两件事 - 节点是否存在,以及该属性是否存在:

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