Это определенно возможно. Во-первых, вам нужно загрузить файл XML и преобразовать его в XML, используя [xml]$xml = Get-Content -Path 'YourXml.xml' -Raw
Затем, чтобы получить электронные письма, соответствующие вашему желанию, вы можете использовать следующее утверждение.
Вот что необходимо для достижения sh именно этого.
[xml]$xml = Get-Content -Path 'YourXml.xml' -Raw
$MatchingNodes= Select-xml -Xml $xml -XPath '//*[Field[@FieldName="Person.IstReferent"]/String[text() =1]]/Field[@FieldName="Person.EmailGeschaeft"]/String[text()]'
$Emails = $MatchingNodes.Node.'#text'
Вы получите следующий результат.
bla.blup1@ospelt.com
bla.blup4@ospelt.com
Используемый синтаксис XPATH можно разложить в следующим образом.
//*[Field[@FieldName="Person.IstReferent"]/String[text() =1]]/Field[@FieldName="Person.EmailGeschaeft"]/String[text()]
//Field
найти все теги полей //*[
Найти все, что находится в скобках, но возвращает узлы на этом уровне, а не давать ребенку . Field[@FieldName="Person.IstReferent"
Атрибут FieldName со значением Person.IstReferent как дочерний элемент узла Field. /String[text()=1]
Узел String должен иметь значение 1
Затем, если вы объедините эту первую часть, вы получите
//*[Field[@FieldName="Person.IstReferent"]/String[text() =1]]
Что означает: «Найти узел, соответствующий этому условию c, но вместо этого предоставьте мне узел на уровне поля вместо значение 1 (Вот почему у вас есть * [ так Вы вернетесь к этому уровню. От этого соответствующего Record узла мы перейдем к тому, что нам на самом деле нужно.
/Field[@FieldName="Person.EmailGeschaeft"]/String[text()]
- Узел поля, который содержит атрибут FieldName , соответствующий Person.EmailGeschaeft с дочерним узлом с именем String
[Text()]
- это синтаксис, который говорит о том, что мы хотим получить значение этого узла.
Ссылка
Выбор- xml