0

我在尝试返回 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"}
}

我已经尝试了变化并进行了实验,但似乎无法获得我正在寻找的混合结果。我在这里做错了吗?

4

1 回答 1

0

正如 Eris 所指出的,该password值不是一个元素/节点,而是一个属性

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

if(($User = $XML.SelectSingleNode('//User')) -and $User.HasAttribute('password'))
{
    Write-Host 'password found!'
}
else
{
    Write-Host 'no password!'
}
于 2016-07-18T19:01:29.887 回答