以下是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也存在的地方才能获得它?
由于
答案 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