我在尝试返回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"}
}
我尝试过变化和实验,但似乎无法获得我想要的混合结果。我在这里做错了吗?
答案 0 :(得分:0)
如Eris所述,password
值不是元素/节点,而是属性。
您需要检查两件事 - 节点是否存在,以及该属性是否存在:
if(($User = $XML.SelectSingleNode('//User')) -and $User.HasAttribute('password'))
{
Write-Host 'password found!'
}
else
{
Write-Host 'no password!'
}