2016-07-18 4 views
0

У меня возникли проблемы с попыткой вернуть список XML и определить, присутствует ли у каждого конкретный узел.Powershell v2.0 - запрос узлов XML

У нас есть список файлов Employee, которые либо имеют, либо не имеют определенного узла XML с именем Password. Если узел пароля присутствует в XML, то это новый сотрудник, иначе это будет обновление. В моей попытке сценария ниже, похоже, он возвращает только тот же результат, зная, что существуют вариации 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

В вашем XML, 'password' не является узлом, это атрибут. – Eris

ответ

0

Как отмечено Эрисом, значение password не является элементом/узлом, а атрибутом .

Вы хотите, чтобы проверить две вещи - то, что узел существует, и что этот атрибут присутствует:

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

Я получаю * Ошибка вызова метода, потому что [System.Xml.XmlDocument] не содержит метода с именем 'HasAttribute' *. MSDN не распознает HasAttribute как метод Powershell. – JDGEEK

+0

Любые мысли по этому поводу? – JDGEEK

+0

@JDGEEK Что именно вы делаете? 'SelectSingleNode()' не возвращает объект 'XmlDocument'. –