Найти атрибут XML с помощью powershell - PullRequest
0 голосов
/ 04 июня 2019

Необходимо найти все задание Имя , где атрибут Действительный для задание равен true и JobLocation НЕ Страна = Англия с использованием select -xml в powershell

<Employee>
  <job id = "123" Name = "Teacher" Valid ="True">
    <jobdetails>
      <JobLocation location="City=London,Country=England" JobType="Permanent"/>
    </jobdetails>
  </job>
  <job id = "356" Name = "Doctor" Valid ="True">
    <jobdetails>
      <JobLocation location="City=Tokyo,Country=Japan" JobType="Permanent"/>
    </jobdetails>
  </job>
  <job id = "987" Name = "Banker" Valid ="True">
    <jobdetails>
      <JobLocation location="City=Manchester,Country=England" JobType="Permanent"/>
    </jobdetails>
  </job>
</Employee>

XML-пути, которые я опробовал

$xml ='//Employee/job[@Valid="True"]/jobdetails*[@*[contains(.,!"Country=England")]]/job/@Id'



$xml ='//Employee/job[@Valid="True"]/jobdetails*[@*[contains(.JobLocation,!"Country=England")]]/job/@Id'

Ответы [ 2 ]

2 голосов
/ 04 июня 2019

Путь без xpath:

[Xml]$xml = Get-Content employee.xml
$xml.employee.job | 
  Where { $_.valid -And 
    $_.jobdetails.joblocation.location -Notmatch 'england' } | 
  Select valid, @{n='Location';e={$_.jobdetails.joblocation.location}}


Valid Location
----- --------
True  City=Tokyo,Country=Japan
2 голосов
/ 04 июня 2019

Выражение фильтра XPath (текст в квадратных скобках) может состоять из нескольких предложений. Чтобы выполнить фильтрацию по значению или атрибуту дочернего узла, просто включите относительный путь к дочернему узлу или атрибуту в качестве второго предложения в выражении фильтра и соедините предложения с соответствующим логическим оператором. Для фильтрации по атрибуту, не содержащему конкретной подстроки, используйте функции not() и contains().

//Employee/job[@Valid="True" and jobdetails/JobLocation[not(contains(@location, "Country=England"))]]/@id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...