Powershell:难以返回xml元素

时间:2016-10-07 09:07:58

标签: xml powershell xpath

以下是xml文件的摘录

<JobList>
  <Job id="Hotel" start="2016-10-06" /> 
  <Job id="Cleaning" start="2016-10-06" /> 
  <Job id="Floor" start="2016-10-06" /> 
  <Job id="Training" start="2016-10-06" /> 
  <Job id="Meeting" start="2016-10-06" /> 
  <Job id="CI" start="2016-10-06" /> 
<Job titleId="Kitchen Associate" id="Kitchen" start="2016-10-06" rank="18">

需要从最后一行返回“titleId”和“start”。

如果我写下面的代码,我可以获得titleId,“Kitchen Associate”没问题。

gc "\\path\fil.xml" | Select-Xml -XPATH "//Job/@start" | select * -expandproperty node | Select titleID

但我似乎无法返回RELATED开始日期,因为它将从JobList返回所有七个开始日期。有没有办法限制结果,只有从titleID也存在的地方才能获得它?

由于

2 个答案:

答案 0 :(得分:1)

您的代码的问题在于,您采用的方法是在获取正确的节点然后选择其属性时,从不同节点获取属性。您也可以使用XPath实现它:

(gc "e:\1.txt" -Raw | Select-Xml -XPATH "//Job[@titleId]/@start").Node

但是这里有更多的Powershell方法:

$xml = [xml] (gc e:\1.txt -Raw)
$node = $xml.JobList.Job | Where-Object { $_.titleId -ne $null }
$node.start

首先根据titleId属性选择正确的节点,然后您就可以访问其所有属性。

请记住,有可能会有多个节点或没有节点具有所需的titleId,因此您需要检查$node是否为空以及节点数量在那里。

答案 1 :(得分:1)

使用正确的XPath。

Select-Xml -XPath '//Job[@titleId and @start]' | Select -expand titleId